@datatechsolutions/ui 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/astrlabe/index.js +107 -107
  2. package/dist/astrlabe/index.mjs +3 -3
  3. package/dist/astrlabe/workflow-canvas.js +3 -3
  4. package/dist/astrlabe/workflow-canvas.mjs +2 -2
  5. package/dist/{chunk-KKXI7CPF.mjs → chunk-2E7HYTS7.mjs} +3 -3
  6. package/dist/{chunk-KKXI7CPF.mjs.map → chunk-2E7HYTS7.mjs.map} +1 -1
  7. package/dist/{chunk-EWYAM4WJ.mjs → chunk-2ZY3IQ2I.mjs} +3 -3
  8. package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-2ZY3IQ2I.mjs.map} +1 -1
  9. package/dist/{chunk-VPFVW7ZF.js → chunk-6E2YH67A.js} +35 -35
  10. package/dist/{chunk-VPFVW7ZF.js.map → chunk-6E2YH67A.js.map} +1 -1
  11. package/dist/{chunk-A4A3SQTV.mjs → chunk-6QJI5YOJ.mjs} +3 -3
  12. package/dist/{chunk-A4A3SQTV.mjs.map → chunk-6QJI5YOJ.mjs.map} +1 -1
  13. package/dist/{chunk-3X3IYDG6.js → chunk-7AM2SXEF.js} +68 -68
  14. package/dist/{chunk-3X3IYDG6.js.map → chunk-7AM2SXEF.js.map} +1 -1
  15. package/dist/{chunk-H37VDL7Y.js → chunk-A2RIX2RK.js} +4 -4
  16. package/dist/{chunk-H37VDL7Y.js.map → chunk-A2RIX2RK.js.map} +1 -1
  17. package/dist/{chunk-32DHEVOH.mjs → chunk-ARLYOLSO.mjs} +3 -3
  18. package/dist/{chunk-32DHEVOH.mjs.map → chunk-ARLYOLSO.mjs.map} +1 -1
  19. package/dist/{chunk-5YVOLHSW.mjs → chunk-AXBD6OAF.mjs} +4 -4
  20. package/dist/{chunk-5YVOLHSW.mjs.map → chunk-AXBD6OAF.mjs.map} +1 -1
  21. package/dist/{chunk-ZP37M2QK.mjs → chunk-BWUFLW5W.mjs} +6 -6
  22. package/dist/{chunk-ZP37M2QK.mjs.map → chunk-BWUFLW5W.mjs.map} +1 -1
  23. package/dist/{chunk-HBOORO52.js → chunk-CLTNCBSP.js} +4 -4
  24. package/dist/{chunk-HBOORO52.js.map → chunk-CLTNCBSP.js.map} +1 -1
  25. package/dist/{chunk-F35GFICG.js → chunk-CRBGZA6Y.js} +13 -13
  26. package/dist/{chunk-F35GFICG.js.map → chunk-CRBGZA6Y.js.map} +1 -1
  27. package/dist/{chunk-7JZFNKJD.js → chunk-DQIEVLA3.js} +35 -35
  28. package/dist/{chunk-7JZFNKJD.js.map → chunk-DQIEVLA3.js.map} +1 -1
  29. package/dist/{chunk-57E4TCB2.mjs → chunk-EAIE4QGD.mjs} +3 -3
  30. package/dist/{chunk-57E4TCB2.mjs.map → chunk-EAIE4QGD.mjs.map} +1 -1
  31. package/dist/{chunk-5W6LMDXV.mjs → chunk-GQWC4EKE.mjs} +4 -4
  32. package/dist/{chunk-5W6LMDXV.mjs.map → chunk-GQWC4EKE.mjs.map} +1 -1
  33. package/dist/{chunk-FKUIVS6I.js → chunk-IVKFXPLO.js} +28 -28
  34. package/dist/{chunk-FKUIVS6I.js.map → chunk-IVKFXPLO.js.map} +1 -1
  35. package/dist/{chunk-FNA66TT4.js → chunk-MT66VKLS.js} +163 -219
  36. package/dist/chunk-MT66VKLS.js.map +1 -0
  37. package/dist/{chunk-74BU2EBZ.mjs → chunk-OEZ7GAJY.mjs} +6 -6
  38. package/dist/{chunk-74BU2EBZ.mjs.map → chunk-OEZ7GAJY.mjs.map} +1 -1
  39. package/dist/{chunk-CZZOCKEA.mjs → chunk-OVQ4MKCV.mjs} +3 -3
  40. package/dist/{chunk-CZZOCKEA.mjs.map → chunk-OVQ4MKCV.mjs.map} +1 -1
  41. package/dist/{chunk-WDBVIU7W.mjs → chunk-PD3JLDA5.mjs} +3 -3
  42. package/dist/{chunk-WDBVIU7W.mjs.map → chunk-PD3JLDA5.mjs.map} +1 -1
  43. package/dist/{chunk-TJPPZU77.js → chunk-R6GEJBFC.js} +34 -34
  44. package/dist/{chunk-TJPPZU77.js.map → chunk-R6GEJBFC.js.map} +1 -1
  45. package/dist/{chunk-Q4QORAMH.js → chunk-RFUSH7WD.js} +10 -10
  46. package/dist/{chunk-Q4QORAMH.js.map → chunk-RFUSH7WD.js.map} +1 -1
  47. package/dist/{chunk-VS6PTRQ7.mjs → chunk-SJ6SUS7H.mjs} +3 -3
  48. package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-SJ6SUS7H.mjs.map} +1 -1
  49. package/dist/{chunk-E57RZXOR.js → chunk-T4IYOKHR.js} +25 -25
  50. package/dist/{chunk-E57RZXOR.js.map → chunk-T4IYOKHR.js.map} +1 -1
  51. package/dist/{chunk-3H5CFLVK.js → chunk-U6VFS3RD.js} +135 -135
  52. package/dist/{chunk-3H5CFLVK.js.map → chunk-U6VFS3RD.js.map} +1 -1
  53. package/dist/{chunk-RCHTRG7R.js → chunk-UZIICTIY.js} +55 -55
  54. package/dist/{chunk-RCHTRG7R.js.map → chunk-UZIICTIY.js.map} +1 -1
  55. package/dist/{chunk-TCP45Q4B.js → chunk-WJENX6KB.js} +9 -9
  56. package/dist/{chunk-TCP45Q4B.js.map → chunk-WJENX6KB.js.map} +1 -1
  57. package/dist/{chunk-PYNXIDG3.mjs → chunk-WS3IJFPW.mjs} +3 -3
  58. package/dist/{chunk-PYNXIDG3.mjs.map → chunk-WS3IJFPW.mjs.map} +1 -1
  59. package/dist/{chunk-Q7HRCCFT.js → chunk-ZDXEGSCF.js} +45 -45
  60. package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZDXEGSCF.js.map} +1 -1
  61. package/dist/{chunk-PCUINUIC.mjs → chunk-ZQEMKEEH.mjs} +3 -3
  62. package/dist/{chunk-PCUINUIC.mjs.map → chunk-ZQEMKEEH.mjs.map} +1 -1
  63. package/dist/{chunk-E6C7MFHJ.mjs → chunk-ZQRUAXGP.mjs} +164 -218
  64. package/dist/chunk-ZQRUAXGP.mjs.map +1 -0
  65. package/dist/index.d.mts +43 -42
  66. package/dist/index.d.ts +43 -42
  67. package/dist/index.js +662 -670
  68. package/dist/index.mjs +1 -1
  69. package/dist/platform/admin/index.js +9 -9
  70. package/dist/platform/admin/index.mjs +3 -3
  71. package/dist/platform/agents-workspace.js +6 -6
  72. package/dist/platform/agents-workspace.mjs +5 -5
  73. package/dist/platform/app-shell.js +3 -3
  74. package/dist/platform/app-shell.mjs +2 -2
  75. package/dist/platform/auth/index.js +21 -21
  76. package/dist/platform/auth/index.mjs +3 -3
  77. package/dist/platform/billing/index.js +3 -3
  78. package/dist/platform/billing/index.mjs +2 -2
  79. package/dist/platform/impersonation/index.js +3 -3
  80. package/dist/platform/impersonation/index.mjs +2 -2
  81. package/dist/platform/index.d.mts +1 -1
  82. package/dist/platform/index.d.ts +1 -1
  83. package/dist/platform/index.js +74 -74
  84. package/dist/platform/index.mjs +17 -17
  85. package/dist/platform/pages/index.d.mts +93 -4
  86. package/dist/platform/pages/index.d.ts +93 -4
  87. package/dist/platform/pages/index.js +1009 -575
  88. package/dist/platform/pages/index.js.map +1 -1
  89. package/dist/platform/pages/index.mjs +805 -372
  90. package/dist/platform/pages/index.mjs.map +1 -1
  91. package/dist/platform/settings/index.js +6 -6
  92. package/dist/platform/settings/index.mjs +5 -5
  93. package/dist/platform/workflow-canvas-shell.js +4 -4
  94. package/dist/platform/workflow-canvas-shell.mjs +3 -3
  95. package/package.json +1 -1
  96. package/dist/chunk-E6C7MFHJ.mjs.map +0 -1
  97. package/dist/chunk-FNA66TT4.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/astrlabe/store/workflow-store.ts","../src/astrlabe/store/modal-store.ts","../src/astrlabe/constants/workflow-constants.ts","../src/astrlabe/components/canvas/edge-insert-popup.tsx","../src/astrlabe/components/canvas/conditional-edge.tsx","../src/astrlabe/components/canvas/custom-connection-line.tsx","../src/astrlabe/components/canvas/draggable-command-bar.tsx","../src/astrlabe/constants/entity-colors.ts","../src/astrlabe/components/config-forms/datasource-node-config-form.tsx","../src/astrlabe/components/icons/agent-framework-icons.tsx","../src/astrlabe/components/nodes/node-card.tsx","../src/astrlabe/components/nodes/node-card-primitives.tsx","../src/astrlabe/components/nodes/node-handles.tsx","../src/astrlabe/components/nodes/node-running-indicator.tsx","../src/astrlabe/components/nodes/agent-flow-node.tsx","../src/astrlabe/components/nodes/agent-tool-flow-node.tsx","../src/astrlabe/components/nodes/tool-flow-node.tsx","../src/astrlabe/components/nodes/rule-flow-node.tsx","../src/astrlabe/components/nodes/entity-flow-node.tsx","../src/astrlabe/components/nodes/start-flow-node.tsx","../src/astrlabe/components/nodes/end-flow-node.tsx","../src/astrlabe/components/nodes/if-else-flow-node.tsx","../src/astrlabe/components/nodes/code-flow-node.tsx","../src/astrlabe/components/nodes/http-request-flow-node.tsx","../src/astrlabe/components/nodes/template-transform-flow-node.tsx","../src/astrlabe/components/nodes/iteration-flow-node.tsx","../src/astrlabe/components/nodes/knowledge-base-flow-node.tsx","../src/astrlabe/components/nodes/answer-flow-node.tsx","../src/astrlabe/components/nodes/question-classifier-flow-node.tsx","../src/astrlabe/components/nodes/parameter-extractor-flow-node.tsx","../src/astrlabe/components/nodes/variable-assigner-flow-node.tsx","../src/astrlabe/components/nodes/variable-aggregator-flow-node.tsx","../src/astrlabe/components/nodes/document-extractor-flow-node.tsx","../src/astrlabe/components/nodes/list-operator-flow-node.tsx","../src/astrlabe/components/nodes/iteration-start-flow-node.tsx","../src/astrlabe/components/nodes/note-flow-node.tsx","../src/astrlabe/components/nodes/datasource-flow-node.tsx","../src/astrlabe/components/nodes/group-flow-node.tsx","../src/astrlabe/components/nodes/audio-input-flow-node.tsx","../src/astrlabe/components/nodes/speech-transcriber-flow-node.tsx","../src/astrlabe/components/nodes/dashboard-output-flow-node.tsx","../src/astrlabe/components/config-forms/config-form-actions.tsx","../src/astrlabe/components/config-forms/variable-list-editor.tsx","../src/astrlabe/components/config-forms/start-node-config-form.tsx","../src/astrlabe/components/config-forms/end-node-config-form.tsx","../src/astrlabe/components/config-forms/if-else-node-config-form.tsx","../src/astrlabe/components/config-forms/code-node-config-form.tsx","../src/astrlabe/components/config-forms/http-request-node-config-form.tsx","../src/astrlabe/components/config-forms/s3-write-node-config-form.tsx","../src/astrlabe/components/config-forms/template-transform-node-config-form.tsx","../src/astrlabe/components/config-forms/iteration-node-config-form.tsx","../src/astrlabe/components/config-forms/knowledge-base-node-config-form.tsx","../src/astrlabe/components/config-forms/answer-node-config-form.tsx","../src/astrlabe/components/config-forms/question-classifier-node-config-form.tsx","../src/astrlabe/components/config-forms/parameter-extractor-node-config-form.tsx","../src/astrlabe/components/config-forms/variable-assigner-node-config-form.tsx","../src/astrlabe/components/config-forms/variable-aggregator-node-config-form.tsx","../src/astrlabe/components/config-forms/document-extractor-node-config-form.tsx","../src/astrlabe/components/config-forms/list-operator-node-config-form.tsx","../src/astrlabe/components/config-forms/iteration-start-node-config-form.tsx","../src/astrlabe/components/config-forms/entity-node-config-form.tsx","../src/astrlabe/components/config-forms/group-node-config-form.tsx","../src/astrlabe/components/config-forms/rule-node-config-form.tsx","../src/astrlabe/components/config-forms/agent-node-config-form.tsx","../src/astrlabe/components/config-forms/audio-input-node-config-form.tsx","../src/astrlabe/components/config-forms/speech-transcriber-node-config-form.tsx","../src/astrlabe/components/config-forms/dashboard-output-node-config-form.tsx","../src/astrlabe/components/modals/logic-node-modal.tsx","../src/astrlabe/components/context-menus/node-context-menu.tsx","../src/astrlabe/components/context-menus/panel-context-menu.tsx","../src/astrlabe/components/context-menus/selection-context-menu.tsx","../src/astrlabe/components/canvas/workflow-canvas.tsx","../src/astrlabe/workflow-provider.tsx","../src/astrlabe/workflow-canvas.tsx"],"names":["create","useState","useRef","useCallback","jsxs","jsx","memo","getBezierPath","DraggableCommandBar","useEffect","ArrowsRightLeftIcon","CircleStackIcon","logo","ServerStackIcon","PlusIcon","XMarkIcon","Fragment","useMemo","AgentFlowNode","Position","CommandLineIcon","TrashIcon","AgentToolFlowNode","ExclamationTriangleIcon","ToolFlowNode","WrenchScrewdriverIcon","RuleFlowNode","EntityFlowNode","StartFlowNode","PlayIcon","EndFlowNode","StopIcon","IfElseFlowNode","ArrowsPointingOutIcon","CodeFlowNode","CodeBracketIcon","HttpRequestFlowNode","GlobeAltIcon","TemplateTransformFlowNode","DocumentTextIcon","IterationFlowNode","ArrowPathIcon","KnowledgeBaseFlowNode","BookOpenIcon","AnswerFlowNode","ChatBubbleLeftRightIcon","QuestionClassifierFlowNode","QuestionMarkCircleIcon","ParameterExtractorFlowNode","AdjustmentsVerticalIcon","VariableAssignerFlowNode","VariableAggregatorFlowNode","Square3Stack3DIcon","DocumentExtractorFlowNode","DocumentMagnifyingGlassIcon","ListOperatorFlowNode","ListBulletIcon","IterationStartFlowNode","PlayCircleIcon","NoteFlowNode","PencilSquareIcon","DATASOURCE_LOGOS","getDatasourceLogo","DatasourceFlowNode","GroupFlowNode","RectangleGroupIcon","AudioInputFlowNode","MicrophoneIcon","SpeechTranscriberFlowNode","SpeakerWaveIcon","DashboardOutputFlowNode","ChartBarIcon","OPERATION_OPTIONS","CursorArrowRaysIcon","ClipboardDocumentIcon","DocumentDuplicateIcon","useReactFlow"],"mappings":"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","file":"chunk-57E4TCB2.mjs","sourcesContent":["/**\n * Workflow Builder Store (Zustand)\n * ================================\n * Central state management for the workflow canvas.\n * Handles nodes, edges, undo/redo history, clipboard,\n * editing state, context menus, and run results.\n */\n\nimport { create } from 'zustand'\nimport type { Node, Edge } from '@xyflow/react'\n\ntype GraphSnapshot = { nodes: Node[]; edges: Edge[] }\n\nexport type CanvasControlMode = 'pointer' | 'hand'\n\ntype ContextMenuState = {\n type: 'node' | 'edge' | 'panel'\n position: { x: number; y: number }\n targetId?: string\n} | null\n\nexport type NodeRunResult = {\n status: 'pending' | 'running' | 'success' | 'error'\n data?: unknown\n error?: string\n durationMs?: number\n}\n\nimport type { LayoutDirection } from '../utils/layout-engine'\n\ntype WorkflowStoreState = {\n nodes: Node[]\n edges: Edge[]\n past: GraphSnapshot[]\n future: GraphSnapshot[]\n clipboard: GraphSnapshot | null\n editingNodeId: string | null\n contextMenu: ContextMenuState\n controlMode: CanvasControlMode\n layoutDirection: LayoutDirection\n showVariableInspector: boolean\n showVersionHistory: boolean\n showRunPanel: boolean\n showMinimap: boolean\n showDots: boolean\n showShortcuts: boolean\n cardDisplayMode: 'detailed' | 'compact'\n isRunning: boolean\n nodeResults: Record<string, NodeRunResult>\n selectedRunId: string | null\n previewPanelOpen: boolean\n}\n\ntype WorkflowStoreActions = {\n setNodes: (updater: Node[] | ((nodes: Node[]) => Node[])) => void\n setEdges: (updater: Edge[] | ((edges: Edge[]) => Edge[])) => void\n takeSnapshot: () => void\n undo: () => void\n redo: () => void\n copy: () => void\n paste: (offset?: number) => void\n selectAll: () => void\n deselectAll: () => void\n setEditingNodeId: (nodeId: string | null) => void\n setContextMenu: (menu: ContextMenuState) => void\n setControlMode: (mode: CanvasControlMode) => void\n setLayoutDirection: (direction: LayoutDirection) => void\n toggleVariableInspector: () => void\n toggleVersionHistory: () => void\n toggleRunPanel: () => void\n toggleMinimap: () => void\n toggleDots: () => void\n toggleShortcuts: () => void\n closeShortcuts: () => void\n toggleCardDisplayMode: () => void\n setIsRunning: (running: boolean) => void\n setNodeResult: (nodeId: string, result: NodeRunResult) => void\n clearNodeResults: () => void\n setSelectedRunId: (runId: string | null) => void\n togglePreviewPanel: () => void\n reset: () => void\n}\n\nexport type WorkflowStore = WorkflowStoreState & WorkflowStoreActions\n\nconst MAX_HISTORY_SIZE = 50\nconst DEFAULT_PASTE_OFFSET = 40\n\nexport const useWorkflowStore = create<WorkflowStore>((set, get) => ({\n // ──────────────────────────────────────────────────────────────────────────\n // State\n // ──────────────────────────────────────────────────────────────────────────\n\n nodes: [],\n edges: [],\n past: [],\n future: [],\n clipboard: null,\n editingNodeId: null,\n contextMenu: null,\n controlMode: 'pointer' as CanvasControlMode,\n layoutDirection: 'free' as LayoutDirection,\n showVariableInspector: false,\n showVersionHistory: false,\n showRunPanel: false,\n showMinimap: true,\n showDots: true,\n showShortcuts: false,\n cardDisplayMode: 'detailed' as const,\n isRunning: false,\n nodeResults: {},\n selectedRunId: null,\n previewPanelOpen: false,\n\n // ──────────────────────────────────────────────────────────────────────────\n // Actions\n // ──────────────────────────────────────────────────────────────────────────\n\n setNodes: (updater) => {\n set((state) => ({\n nodes: typeof updater === 'function' ? updater(state.nodes) : updater,\n }))\n },\n\n setEdges: (updater) => {\n set((state) => ({\n edges: typeof updater === 'function' ? updater(state.edges) : updater,\n }))\n },\n\n takeSnapshot: () => {\n const { nodes, edges, past } = get()\n const snapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n const trimmedPast = past.slice(-(MAX_HISTORY_SIZE - 1))\n set({\n past: [...trimmedPast, snapshot],\n future: [],\n })\n },\n\n undo: () => {\n const { past, nodes, edges } = get()\n if (past.length === 0) return\n\n const previous = past[past.length - 1]\n const remainingPast = past.slice(0, -1)\n\n const currentSnapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n\n set((state) => ({\n nodes: previous.nodes,\n edges: previous.edges,\n past: remainingPast,\n future: [...state.future, currentSnapshot],\n }))\n },\n\n redo: () => {\n const { future, nodes, edges } = get()\n if (future.length === 0) return\n\n const next = future[future.length - 1]\n const remainingFuture = future.slice(0, -1)\n\n const currentSnapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n\n set((state) => ({\n nodes: next.nodes,\n edges: next.edges,\n future: remainingFuture,\n past: [...state.past, currentSnapshot],\n }))\n },\n\n copy: () => {\n const { nodes, edges } = get()\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length === 0) return\n\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n const internalEdges = edges.filter(\n (edge) => selectedNodeIds.has(edge.source) && selectedNodeIds.has(edge.target),\n )\n\n set({\n clipboard: {\n nodes: selectedNodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: internalEdges.map((edge) => ({ ...edge })),\n },\n })\n },\n\n paste: (offset = DEFAULT_PASTE_OFFSET) => {\n const { clipboard } = get()\n if (!clipboard || clipboard.nodes.length === 0) return\n\n get().takeSnapshot()\n\n const idMapping = new Map<string, string>()\n for (const node of clipboard.nodes) {\n idMapping.set(node.id, crypto.randomUUID())\n }\n\n const pastedNodes: Node[] = clipboard.nodes.map((node) => ({\n ...node,\n id: idMapping.get(node.id) ?? crypto.randomUUID(),\n position: {\n x: node.position.x + offset,\n y: node.position.y + offset,\n },\n selected: true,\n data: { ...node.data },\n }))\n\n const pastedEdges: Edge[] = clipboard.edges.map((edge) => ({\n ...edge,\n id: crypto.randomUUID(),\n source: idMapping.get(edge.source) ?? edge.source,\n target: idMapping.get(edge.target) ?? edge.target,\n }))\n\n set((state) => ({\n nodes: [\n ...state.nodes.map((node) => ({ ...node, selected: false })),\n ...pastedNodes,\n ],\n edges: [...state.edges, ...pastedEdges],\n clipboard: {\n nodes: pastedNodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: pastedEdges.map((edge) => ({ ...edge })),\n },\n }))\n },\n\n selectAll: () => {\n set((state) => ({\n nodes: state.nodes.map((node) => ({ ...node, selected: true })),\n }))\n },\n\n deselectAll: () => {\n set((state) => ({\n nodes: state.nodes.map((node) => ({ ...node, selected: false })),\n }))\n },\n\n setEditingNodeId: (nodeId) => {\n set({ editingNodeId: nodeId })\n },\n\n setContextMenu: (menu) => {\n set({ contextMenu: menu })\n },\n\n setControlMode: (mode) => {\n set({ controlMode: mode })\n },\n\n setLayoutDirection: (direction) => {\n set({ layoutDirection: direction })\n },\n\n toggleVariableInspector: () => {\n set((state) => ({ showVariableInspector: !state.showVariableInspector }))\n },\n\n toggleVersionHistory: () => {\n set((state) => ({ showVersionHistory: !state.showVersionHistory }))\n },\n\n toggleRunPanel: () => {\n set((state) => ({ showRunPanel: !state.showRunPanel }))\n },\n\n toggleMinimap: () => {\n set((state) => ({ showMinimap: !state.showMinimap }))\n },\n\n toggleDots: () => {\n set((state) => ({ showDots: !state.showDots }))\n },\n\n toggleShortcuts: () => {\n set((state) => ({ showShortcuts: !state.showShortcuts }))\n },\n\n closeShortcuts: () => {\n set({ showShortcuts: false })\n },\n\n toggleCardDisplayMode: () => {\n set((state) => ({ cardDisplayMode: state.cardDisplayMode === 'detailed' ? 'compact' : 'detailed' }))\n },\n\n setIsRunning: (running) => {\n set({ isRunning: running })\n },\n\n setNodeResult: (nodeId, result) => {\n set((state) => ({\n nodeResults: { ...state.nodeResults, [nodeId]: result },\n }))\n },\n\n clearNodeResults: () => {\n set({ nodeResults: {}, isRunning: false })\n },\n\n setSelectedRunId: (runId) => {\n set({ selectedRunId: runId })\n },\n\n togglePreviewPanel: () => {\n set((state) => ({ previewPanelOpen: !state.previewPanelOpen }))\n },\n\n reset: () => {\n set({\n nodes: [],\n edges: [],\n past: [],\n future: [],\n clipboard: null,\n editingNodeId: null,\n contextMenu: null,\n controlMode: 'pointer' as CanvasControlMode,\n showVariableInspector: false,\n showVersionHistory: false,\n showRunPanel: false,\n showMinimap: true,\n showDots: true,\n showShortcuts: false,\n cardDisplayMode: 'detailed' as const,\n isRunning: false,\n nodeResults: {},\n selectedRunId: null,\n previewPanelOpen: false,\n })\n },\n}))\n","/**\n * Modal Store (Zustand)\n * ======================\n * Stack-based modal management. Opening a new modal pushes it onto the stack\n * (preserving the previous modal behind it). Closing pops the stack and\n * restores the previous modal. This enables flows like:\n * Canvas → Agent Modal → Workflow Tool Modal (agent stays behind)\n */\n\nimport { create } from 'zustand'\nimport type { AgentWithPrompts } from '../types'\nimport type { AgentModel, AgentTool, LogicNodeConfig } from '../contracts'\nimport type { ModelProvider } from '../components/panels/node-palette'\n\ntype ModalType = 'agent' | 'logic-node' | 'pipeline-settings' | null\n\ntype AgentModalData = {\n agent: AgentWithPrompts\n models: AgentModel[]\n /** Available agent tools the agent can use */\n agentTools?: AgentTool[]\n /** Available model providers for credential config */\n modelProviders?: ModelProvider[]\n isCreateMode: boolean\n}\n\ntype LogicNodeModalData = {\n nodeId: string\n nodeLabel: string\n config: LogicNodeConfig\n}\n\ntype PipelineSettingsModalData = {\n name: string\n description: string\n /** Optional — populated when opening the modal against an already-\n * loaded workflow so admins can archive / flip draft state without\n * closing the modal. Callers that don't care about lifecycle (e.g.\n * create-from-dialog flows) can leave these out. */\n slug?: string | null\n isDraft?: boolean\n isActive?: boolean\n}\n\ntype ModalEntry = {\n type: ModalType\n agentData: AgentModalData | null\n logicNodeData: LogicNodeModalData | null\n pipelineSettingsData: PipelineSettingsModalData | null\n}\n\ntype ModalStoreState = {\n /** Current active modal (top of stack) */\n activeModal: ModalType\n agentData: AgentModalData | null\n logicNodeData: LogicNodeModalData | null\n pipelineSettingsData: PipelineSettingsModalData | null\n /** Stack of previous modals (for back-navigation) */\n stack: ModalEntry[]\n}\n\ntype ModalStoreActions = {\n openAgentModal: (agent: AgentWithPrompts, models: AgentModel[], isCreateMode?: boolean, agentTools?: AgentTool[], modelProviders?: ModelProvider[]) => void\n openLogicNodeModal: (nodeId: string, nodeLabel: string, config: LogicNodeConfig) => void\n openPipelineSettingsModal: (\n name: string,\n description: string,\n lifecycle?: { slug?: string | null; isDraft?: boolean; isActive?: boolean },\n ) => void\n /** Close current modal. If stack has entries, restores the previous modal. */\n closeModal: () => void\n /** Close all modals and clear the stack. */\n closeAllModals: () => void\n}\n\nexport type ModalStore = ModalStoreState & ModalStoreActions\n\nconst EMPTY_STATE: Pick<ModalStoreState, 'activeModal' | 'agentData' | 'logicNodeData' | 'pipelineSettingsData'> = {\n activeModal: null,\n agentData: null,\n logicNodeData: null,\n pipelineSettingsData: null,\n}\n\nexport const useModalStore = create<ModalStore>((set, get) => ({\n ...EMPTY_STATE,\n stack: [],\n\n openAgentModal: (agent, models, isCreateMode = false, agentTools, modelProviders) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'agent',\n agentData: { agent, models, isCreateMode, agentTools, modelProviders },\n logicNodeData: null,\n pipelineSettingsData: null,\n stack: newStack,\n })\n },\n\n openLogicNodeModal: (nodeId, nodeLabel, config) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'logic-node',\n logicNodeData: { nodeId, nodeLabel, config },\n agentData: null,\n pipelineSettingsData: null,\n stack: newStack,\n })\n },\n\n openPipelineSettingsModal: (name, description, lifecycle) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'pipeline-settings',\n pipelineSettingsData: {\n name,\n description,\n slug: lifecycle?.slug,\n isDraft: lifecycle?.isDraft,\n isActive: lifecycle?.isActive,\n },\n agentData: null,\n logicNodeData: null,\n stack: newStack,\n })\n },\n\n closeModal: () => {\n const { stack } = get()\n if (stack.length > 0) {\n // Pop the stack — restore previous modal\n const previous = stack[stack.length - 1]\n set({\n activeModal: previous.type,\n agentData: previous.agentData,\n logicNodeData: previous.logicNodeData,\n pipelineSettingsData: previous.pipelineSettingsData,\n stack: stack.slice(0, -1),\n })\n } else {\n // No stack — close everything\n set({ ...EMPTY_STATE, stack: [] })\n }\n },\n\n closeAllModals: () => {\n set({ ...EMPTY_STATE, stack: [] })\n },\n}))\n","import {\n CloudIcon,\n ChartBarIcon,\n NewspaperIcon,\n WrenchScrewdriverIcon,\n PlayIcon,\n StopIcon,\n ArrowsPointingOutIcon,\n CodeBracketIcon,\n GlobeAltIcon,\n DocumentTextIcon,\n ArrowPathIcon,\n BookOpenIcon,\n ChatBubbleLeftRightIcon,\n QuestionMarkCircleIcon,\n AdjustmentsVerticalIcon,\n ArrowsRightLeftIcon,\n Square3Stack3DIcon,\n DocumentMagnifyingGlassIcon,\n ListBulletIcon,\n PlayCircleIcon,\n PencilSquareIcon,\n CircleStackIcon,\n RectangleGroupIcon,\n ServerStackIcon,\n KeyIcon,\n CloudArrowUpIcon,\n MicrophoneIcon,\n SpeakerWaveIcon,\n} from '@heroicons/react/24/outline'\n\nexport const GRAPH_ACTIVE_EDGE_COLOR = '#14b8a6'\nexport const GRAPH_TRUE_EDGE_COLOR = '#22c55e'\nexport const GRAPH_FALSE_EDGE_COLOR = '#ef4444'\nexport const GRAPH_RULE_EDGE_COLOR = '#8b5cf6'\n\nexport const ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n CloudIcon,\n ChartBarIcon,\n NewspaperIcon,\n WrenchScrewdriverIcon,\n}\n\nexport const CATEGORY_COLORS: Record<string, string> = {\n market: 'from-emerald-400 to-green-500',\n data: 'from-blue-400 to-cyan-500',\n compliance: 'from-purple-400 to-violet-500',\n external: 'from-gray-400 to-gray-500',\n}\n\nexport const CATEGORY_PILL_COLORS: Record<string, string> = {\n market: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n data: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n compliance: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n external: 'bg-gray-100 text-gray-700 dark:bg-white/10 dark:text-gray-300',\n}\n\nexport const ADJUSTMENT_GRADIENT: Record<string, string> = {\n percentage: 'from-purple-400 to-violet-500',\n fixed: 'from-blue-400 to-cyan-500',\n formula: 'from-amber-400 to-orange-500',\n}\n\nexport const ADJUSTMENT_PILL: Record<string, string> = {\n percentage: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n fixed: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n formula: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n}\n\n// ============================================================================\n// Logic Node Constants (Dify-inspired pipeline control nodes)\n// ============================================================================\n\nexport const LOGIC_NODE_GRADIENTS: Record<string, string> = {\n start: 'from-green-400 to-emerald-500',\n end: 'from-red-400 to-rose-500',\n if_else: 'from-amber-400 to-orange-500',\n code: 'from-cyan-400 to-sky-500',\n http_request: 'from-orange-400 to-amber-500',\n s3_write: 'from-cyan-400 to-cyan-500',\n template_transform: 'from-pink-400 to-rose-500',\n iteration: 'from-indigo-400 to-violet-500',\n knowledge_base: 'from-emerald-400 to-teal-500',\n answer: 'from-blue-400 to-indigo-500',\n question_classifier: 'from-purple-400 to-fuchsia-500',\n parameter_extractor: 'from-emerald-400 to-green-500',\n variable_assigner: 'from-sky-400 to-blue-500',\n variable_aggregator: 'from-violet-400 to-purple-500',\n document_extractor: 'from-rose-400 to-pink-500',\n list_operator: 'from-lime-400 to-green-500',\n iteration_start: 'from-indigo-400 to-blue-500',\n note: 'from-yellow-400 to-amber-500',\n entity: 'from-blue-400 to-cyan-500',\n datasource: 'from-cyan-500 to-blue-600',\n model_provider: 'from-slate-500 to-gray-600',\n dashboard_output: 'from-fuchsia-500 to-pink-600',\n group: 'from-slate-400 to-gray-500',\n audio_input: 'from-teal-400 to-cyan-500',\n speech_transcriber: 'from-violet-500 to-purple-600',\n}\n\nexport const LOGIC_NODE_BADGE_COLORS: Record<string, string> = {\n start: 'bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300',\n end: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n if_else: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n code: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n http_request: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n s3_write: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n template_transform: 'bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300',\n iteration: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n knowledge_base: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n answer: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n question_classifier: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n parameter_extractor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n variable_assigner: 'bg-sky-100 text-sky-700 dark:bg-sky-500/20 dark:text-sky-300',\n variable_aggregator: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n document_extractor: 'bg-rose-100 text-rose-700 dark:bg-rose-500/20 dark:text-rose-300',\n list_operator: 'bg-lime-100 text-lime-700 dark:bg-lime-500/20 dark:text-lime-300',\n iteration_start: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n note: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-500/20 dark:text-yellow-300',\n entity: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n datasource: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n model_provider: 'bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300',\n dashboard_output: 'bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-500/20 dark:text-fuchsia-300',\n group: 'bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300',\n audio_input: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n speech_transcriber: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n}\n\nexport const LOGIC_NODE_BADGE_SOFT_COLORS: Record<string, string> = {\n start: 'bg-green-50 text-green-600 dark:bg-green-500/20 dark:text-green-400',\n end: 'bg-red-50 text-red-600 dark:bg-red-500/20 dark:text-red-400',\n if_else: 'bg-amber-50 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400',\n code: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n http_request: 'bg-orange-50 text-orange-600 dark:bg-orange-500/20 dark:text-orange-400',\n s3_write: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n template_transform: 'bg-pink-50 text-pink-600 dark:bg-pink-500/20 dark:text-pink-400',\n iteration: 'bg-indigo-50 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400',\n knowledge_base: 'bg-emerald-50 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400',\n answer: 'bg-blue-50 text-blue-600 dark:bg-blue-500/20 dark:text-blue-400',\n question_classifier: 'bg-purple-50 text-purple-600 dark:bg-purple-500/20 dark:text-purple-400',\n parameter_extractor: 'bg-emerald-50 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400',\n variable_assigner: 'bg-sky-50 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400',\n variable_aggregator: 'bg-violet-50 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400',\n document_extractor: 'bg-rose-50 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400',\n list_operator: 'bg-lime-50 text-lime-600 dark:bg-lime-500/20 dark:text-lime-400',\n iteration_start: 'bg-indigo-50 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400',\n note: 'bg-yellow-50 text-yellow-600 dark:bg-yellow-500/20 dark:text-yellow-400',\n entity: 'bg-blue-50 text-blue-600 dark:bg-blue-500/20 dark:text-blue-400',\n datasource: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n model_provider: 'bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400',\n dashboard_output: 'bg-fuchsia-50 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400',\n group: 'bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400',\n audio_input: 'bg-teal-50 text-teal-600 dark:bg-teal-500/20 dark:text-teal-400',\n speech_transcriber: 'bg-violet-50 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400',\n}\n\nexport const LOGIC_ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n start: PlayIcon,\n end: StopIcon,\n if_else: ArrowsPointingOutIcon,\n code: CodeBracketIcon,\n http_request: GlobeAltIcon,\n s3_write: CloudArrowUpIcon,\n template_transform: DocumentTextIcon,\n iteration: ArrowPathIcon,\n knowledge_base: BookOpenIcon,\n answer: ChatBubbleLeftRightIcon,\n question_classifier: QuestionMarkCircleIcon,\n parameter_extractor: AdjustmentsVerticalIcon,\n variable_assigner: ArrowsRightLeftIcon,\n variable_aggregator: Square3Stack3DIcon,\n document_extractor: DocumentMagnifyingGlassIcon,\n list_operator: ListBulletIcon,\n iteration_start: PlayCircleIcon,\n note: PencilSquareIcon,\n entity: CircleStackIcon,\n datasource: ServerStackIcon,\n model_provider: KeyIcon,\n dashboard_output: ChartBarIcon,\n group: RectangleGroupIcon,\n audio_input: MicrophoneIcon,\n speech_transcriber: SpeakerWaveIcon,\n}\n\n// ============================================================================\n// Node Selection / Hover State Classes\n// ============================================================================\n\n/** Workflow node types whose Rust executor is still a stub / no-op today.\n * These are hidden from the palette by default and surfaced with a warning\n * in their config modal so authors know the node won't run end-to-end yet.\n * Per-node opt-in (e.g. via org settings) replaces the previous global\n * \"Show experimental\" palette toggle. */\nexport const EXPERIMENTAL_NODE_TYPES: ReadonlySet<string> = new Set([\n 'document_extractor',\n 'knowledge_base',\n])\n\nexport function isExperimentalNodeType(nodeType: string | undefined | null): boolean {\n return !!nodeType && EXPERIMENTAL_NODE_TYPES.has(nodeType)\n}\n\n/** Classes applied when a node is selected (click or programmatic selection).\n * Uses a CSS class (.node-card-selected) to override liquid-surface borders. */\nexport const NODE_SELECTED_CLASS = 'node-card-selected'\n\n/** Classes applied on hover when a node is NOT selected.\n * Uses a CSS class (.node-card-hover) to override liquid-surface borders. */\nexport const NODE_HOVER_CLASS = 'node-card-hover'\n\n/** Static border color per node type (light + dark, non-selected, non-hovered) */\nexport const NODE_BORDER_COLORS: Record<string, string> = {\n agent: 'border-gray-300/50 dark:border-gray-600/50',\n tool: 'border-gray-300/50 dark:border-gray-600/50',\n agent_tool: 'border-amber-300/50 dark:border-amber-600/50',\n entity: 'border-gray-300/50 dark:border-gray-600/50',\n rule: 'border-gray-300/50 dark:border-gray-600/50',\n start: 'border-green-300/50 dark:border-green-600/50',\n end: 'border-red-300/50 dark:border-red-600/50',\n if_else: 'border-amber-300/50 dark:border-amber-600/50',\n code: 'border-cyan-300/50 dark:border-cyan-600/50',\n http_request: 'border-orange-300/50 dark:border-orange-600/50',\n s3_write: 'border-cyan-300/50 dark:border-cyan-600/50',\n template_transform: 'border-pink-300/50 dark:border-pink-600/50',\n iteration: 'border-indigo-300/50 dark:border-indigo-600/50',\n iteration_start: 'border-indigo-300/50 dark:border-indigo-600/50',\n knowledge_base: 'border-emerald-300/50 dark:border-emerald-600/50',\n answer: 'border-blue-300/50 dark:border-blue-600/50',\n question_classifier: 'border-purple-300/50 dark:border-purple-600/50',\n parameter_extractor: 'border-emerald-300/50 dark:border-emerald-600/50',\n variable_assigner: 'border-sky-300/50 dark:border-sky-600/50',\n variable_aggregator: 'border-violet-300/50 dark:border-violet-600/50',\n document_extractor: 'border-rose-300/50 dark:border-rose-600/50',\n list_operator: 'border-lime-300/50 dark:border-lime-600/50',\n note: 'border-gray-200/50 dark:border-gray-700/50',\n datasource: 'border-cyan-300/50 dark:border-cyan-600/50',\n model_provider: 'border-slate-300/50 dark:border-slate-600/50',\n audio_input: 'border-teal-300/50 dark:border-teal-600/50',\n speech_transcriber: 'border-violet-300/50 dark:border-violet-600/50',\n}\n\n/**\n * Returns the border + ring classes for a node based on its selected state.\n * Usage: `getNodeStateClass(selected, 'agent')`\n * Or with a custom border: `getNodeStateClass(selected, undefined, 'border-slate-300/50 dark:border-slate-600/50')`\n */\nexport function getNodeStateClass(\n selected: boolean | undefined,\n nodeType?: string,\n customBorder?: string,\n): string {\n if (selected) return NODE_SELECTED_CLASS\n const border = customBorder ?? (nodeType ? NODE_BORDER_COLORS[nodeType] : undefined) ?? NODE_BORDER_COLORS.agent\n return `${border} ${NODE_HOVER_CLASS}`\n}\n\n// ============================================================================\n// MiniMap Node Colors (used by MiniMap component on the canvas)\n// ============================================================================\n\nexport const MINIMAP_NODE_COLORS: Record<string, string> = {\n agent: '#6366f1',\n tool: '#14b8a6',\n agent_tool: '#f59e0b',\n rule: '#8b5cf6',\n start: '#22c55e',\n end: '#ef4444',\n if_else: '#f59e0b',\n code: '#06b6d4',\n http_request: '#f97316',\n s3_write: '#06b6d4',\n template_transform: '#ec4899',\n iteration: '#818cf8',\n knowledge_base: '#10b981',\n answer: '#3b82f6',\n question_classifier: '#a855f7',\n parameter_extractor: '#10b981',\n variable_assigner: '#0ea5e9',\n variable_aggregator: '#8b5cf6',\n document_extractor: '#f43f5e',\n list_operator: '#84cc16',\n iteration_start: '#6366f1',\n note: '#eab308',\n entity: '#3b82f6',\n datasource: '#06b6d4',\n model_provider: '#64748b',\n group: '#64748b',\n}\n\nexport const NODE_EXECUTION_ACCENT_COLORS: Record<string, string> = {\n ...MINIMAP_NODE_COLORS,\n}\n\nfunction hexToRgb(hexColor: string): [number, number, number] {\n const normalizedHex = hexColor.replace('#', '')\n const parsed = Number.parseInt(normalizedHex, 16)\n\n if (Number.isNaN(parsed) || normalizedHex.length !== 6) {\n return [99, 102, 241]\n }\n\n return [(parsed >> 16) & 255, (parsed >> 8) & 255, parsed & 255]\n}\n\nexport function getNodeExecutionAccent(nodeType?: string): string {\n return NODE_EXECUTION_ACCENT_COLORS[nodeType ?? ''] ?? NODE_EXECUTION_ACCENT_COLORS.agent\n}\n\nexport function getNodeExecutionAccentRgb(nodeType?: string): string {\n const [red, green, blue] = hexToRgb(getNodeExecutionAccent(nodeType))\n return `${red}, ${green}, ${blue}`\n}\n\nexport const LOGIC_NODE_HANDLE_COLORS: Record<string, string> = {\n start: '!bg-green-500',\n end: '!bg-red-500',\n if_else: '!bg-amber-500',\n code: '!bg-cyan-500',\n http_request: '!bg-orange-500',\n s3_write: '!bg-cyan-500',\n template_transform: '!bg-pink-500',\n iteration: '!bg-indigo-500',\n knowledge_base: '!bg-emerald-500',\n answer: '!bg-blue-500',\n question_classifier: '!bg-purple-500',\n parameter_extractor: '!bg-emerald-500',\n variable_assigner: '!bg-sky-500',\n variable_aggregator: '!bg-violet-500',\n document_extractor: '!bg-rose-500',\n list_operator: '!bg-lime-500',\n iteration_start: '!bg-indigo-500',\n note: '!bg-yellow-500',\n entity: '!bg-blue-500',\n datasource: '!bg-cyan-500',\n model_provider: '!bg-slate-500',\n group: '!bg-slate-500',\n}\n","/**\n * Edge Insert Popup\n * =================\n * Dify-style inline node type selector that appears when\n * clicking the + button on an edge midpoint. Allows quick\n * insertion of a node between two connected nodes.\n */\n\nimport { memo, useState, useRef, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { WorkflowNodeType } from '../../contracts'\nimport { LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS } from '../../constants/workflow-constants'\n\ntype InsertableNodeItem = {\n nodeType: WorkflowNodeType\n nameKey: string\n subcategory: string\n}\n\n/**\n * Subset of node types that make sense for inline edge insertion.\n * Excludes: start, end, iteration_start, note (annotations)\n */\nconst INSERTABLE_NODES: InsertableNodeItem[] = [\n { nodeType: 'if_else', nameKey: 'ifElseNode', subcategory: 'Control' },\n { nodeType: 'iteration', nameKey: 'iterationNode', subcategory: 'Control' },\n { nodeType: 'code', nameKey: 'codeNode', subcategory: 'Data' },\n { nodeType: 'http_request', nameKey: 'httpRequestNode', subcategory: 'Data' },\n { nodeType: 'template_transform', nameKey: 'templateTransformNode', subcategory: 'Data' },\n { nodeType: 'variable_assigner', nameKey: 'variableAssignerNode', subcategory: 'Data' },\n { nodeType: 'variable_aggregator', nameKey: 'variableAggregatorNode', subcategory: 'Data' },\n { nodeType: 'list_operator', nameKey: 'listOperatorNode', subcategory: 'Data' },\n { nodeType: 'document_extractor', nameKey: 'documentExtractorNode', subcategory: 'Data' },\n { nodeType: 'knowledge_base', nameKey: 'knowledgeBaseNode', subcategory: 'AI' },\n { nodeType: 'answer', nameKey: 'answerNode', subcategory: 'AI' },\n { nodeType: 'question_classifier', nameKey: 'questionClassifierNode', subcategory: 'AI' },\n { nodeType: 'parameter_extractor', nameKey: 'parameterExtractorNode', subcategory: 'AI' },\n { nodeType: 'audio_input', nameKey: 'audioInputNode', subcategory: 'AI' },\n { nodeType: 'speech_transcriber', nameKey: 'speechTranscriberNode', subcategory: 'AI' },\n]\n\ntype EdgeInsertPopupProps = {\n position: { x: number; y: number }\n onSelect: (nodeType: WorkflowNodeType) => void\n onClose: () => void\n}\n\nfunction EdgeInsertPopupComponent({ position, onSelect, onClose }: EdgeInsertPopupProps) {\n const tWorkflow = useTranslations('agents.workflow')\n const [searchQuery, setSearchQuery] = useState('')\n const popupRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Auto-focus search input\n useEffect(() => {\n inputRef.current?.focus()\n }, [])\n\n // Close on outside click\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (popupRef.current && !popupRef.current.contains(event.target as HTMLElement)) {\n onClose()\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [onClose])\n\n // Close on Escape\n useEffect(() => {\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [onClose])\n\n const filteredNodes = searchQuery.trim()\n ? INSERTABLE_NODES.filter((item) =>\n tWorkflow(item.nameKey).toLowerCase().includes(searchQuery.toLowerCase())\n )\n : INSERTABLE_NODES\n\n const handleSelect = useCallback((nodeType: WorkflowNodeType) => {\n onSelect(nodeType)\n onClose()\n }, [onSelect, onClose])\n\n return (\n <div\n ref={popupRef}\n className=\"nodrag nopan pointer-events-auto absolute z-50\"\n style={{\n transform: `translate(-50%, -50%) translate(${position.x}px, ${position.y}px)`,\n }}\n >\n <div className=\"liquid-surface w-[200px] rounded-xl p-2 shadow-2xl ring-1 ring-black/5 dark:ring-white/10\">\n {/* Search */}\n <input\n ref={inputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n placeholder={tWorkflow('searchPalette')}\n className=\"mb-1.5 w-full rounded-lg bg-gray-100/60 px-2.5 py-1.5 text-[11px] text-gray-900 placeholder-gray-400 outline-none dark:bg-white/10 dark:text-white dark:placeholder-gray-500\"\n />\n\n {/* Node list */}\n <div className=\"max-h-[240px] space-y-0.5 overflow-y-auto\">\n {filteredNodes.map((item) => {\n const IconComponent = LOGIC_ICON_MAP[item.nodeType]\n const gradient = LOGIC_NODE_GRADIENTS[item.nodeType] ?? 'from-gray-400 to-gray-500'\n\n return (\n <button\n key={item.nodeType}\n type=\"button\"\n onClick={() => handleSelect(item.nodeType)}\n className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left transition-colors hover:bg-gray-100/60 dark:hover:bg-white/10\"\n >\n <div className={`flex h-5 w-5 items-center justify-center rounded-md bg-gradient-to-br ${gradient} shadow-sm`}>\n {IconComponent && <IconComponent className=\"h-3 w-3 text-white\" />}\n </div>\n <span className=\"truncate text-[11px] font-medium text-gray-700 dark:text-gray-300\">\n {tWorkflow(item.nameKey)}\n </span>\n </button>\n )\n })}\n {filteredNodes.length === 0 && (\n <p className=\"py-2 text-center text-[10px] text-gray-400 dark:text-gray-500\">\n {tWorkflow('noLogicNodes')}\n </p>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport const EdgeInsertPopup = memo(EdgeInsertPopupComponent)\n","import { memo, useState, useRef, useCallback } from 'react'\nimport {\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n useReactFlow,\n type EdgeProps,\n} from '@xyflow/react'\nimport { XMarkIcon, PlusIcon } from '@heroicons/react/24/solid'\nimport { Badge, type BadgeColor } from '@ui/components/badge'\nimport type { WorkflowNodeType } from '../../contracts'\nimport { EdgeInsertPopup } from './edge-insert-popup'\n\nexport type ConditionalEdgeData = {\n label?: string\n onInsertNode?: (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => void\n}\n\n// Map well-known branch labels to canonical Badge colors. Anything not in\n// this map (e.g. Question Classifier category names) falls back to purple,\n// matching the previous `DEFAULT_LABEL_STYLE` behaviour.\nconst LABEL_COLORS: Record<string, BadgeColor> = {\n True: 'green',\n False: 'red',\n Loop: 'violet',\n}\nconst DEFAULT_LABEL_COLOR: BadgeColor = 'purple'\n\nfunction ConditionalEdgeComponent({\n id,\n source,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n sourceHandleId,\n selected,\n style = {},\n markerEnd,\n data,\n}: EdgeProps) {\n const [isHovered, setIsHovered] = useState(false)\n const [showInsertPopup, setShowInsertPopup] = useState(false)\n const hoverTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleMouseEnter = useCallback(() => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n hoverTimeout.current = null\n setIsHovered(true)\n }, [])\n\n const handleMouseLeave = useCallback(() => {\n hoverTimeout.current = setTimeout(() => setIsHovered(false), 100)\n }, [])\n const { setEdges } = useReactFlow()\n\n const [edgePath, labelX, labelY] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n })\n\n const edgeData = data as ConditionalEdgeData | undefined\n const label = edgeData?.label\n ?? (sourceHandleId === 'true-out' ? 'True' : undefined)\n ?? (sourceHandleId === 'false-out' ? 'False' : undefined)\n ?? (sourceHandleId === 'loop-out' ? 'Loop' : undefined)\n\n const labelColor: BadgeColor | undefined = label ? (LABEL_COLORS[label] ?? DEFAULT_LABEL_COLOR) : undefined\n const showControls = selected || isHovered\n\n const handleDeleteEdge = (event: React.MouseEvent) => {\n event.stopPropagation()\n setEdges((currentEdges) => currentEdges.filter((edge) => edge.id !== id))\n }\n\n const handleInsertClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n setShowInsertPopup(true)\n }\n\n const handleInsertNodeSelect = (nodeType: WorkflowNodeType) => {\n // Calculate midpoint in flow coordinates\n const midpointX = (sourceX + targetX) / 2\n const midpointY = (sourceY + targetY) / 2\n\n edgeData?.onInsertNode?.(id, nodeType, { x: midpointX, y: midpointY })\n setShowInsertPopup(false)\n }\n\n // Compute vertical offsets for labels, + button, and delete button\n // so they don't overlap\n const hasLabel = Boolean(label && labelColor)\n const insertButtonOffset = hasLabel ? -20 : 0\n const deleteButtonOffset = hasLabel ? (showInsertPopup ? -40 : -40) : (showInsertPopup ? -20 : -20)\n\n return (\n <g\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* Invisible wider path for easier hover/click detection */}\n <path\n d={edgePath}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={20}\n className=\"react-flow__edge-interaction\"\n />\n <BaseEdge id={id} path={edgePath} markerEnd={markerEnd} style={style} />\n\n <EdgeLabelRenderer>\n {/* Conditional label (True / False / Loop / Category names) */}\n {hasLabel && labelColor && (\n <div\n className=\"nodrag nopan pointer-events-auto absolute\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,\n }}\n data-testid={`edge-label-${id}`}\n >\n <Badge color={labelColor} size=\"xs\">{label}</Badge>\n </div>\n )}\n\n {/* Insert node button — shown on hover */}\n {showControls && !showInsertPopup && (\n <button\n type=\"button\"\n className=\"nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-teal-300 bg-white shadow-md transition-colors hover:bg-teal-50 dark:border-teal-600 dark:bg-gray-800 dark:hover:bg-teal-900/30\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + insertButtonOffset}px)`,\n }}\n onClick={handleInsertClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label=\"Insert node\"\n >\n <PlusIcon className=\"h-3 w-3 text-teal-500 dark:text-teal-400\" />\n </button>\n )}\n\n {/* Insert popup */}\n {showInsertPopup && (\n <EdgeInsertPopup\n position={{ x: labelX, y: labelY + insertButtonOffset }}\n onSelect={handleInsertNodeSelect}\n onClose={() => setShowInsertPopup(false)}\n />\n )}\n\n {/* Delete button — shown on hover or selection */}\n {showControls && (\n <button\n type=\"button\"\n className=\"nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-white shadow-md transition-colors hover:bg-red-50 dark:border-red-600 dark:bg-gray-800 dark:hover:bg-red-900/30\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + deleteButtonOffset}px)`,\n }}\n onClick={handleDeleteEdge}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label=\"Delete connection\"\n >\n <XMarkIcon className=\"h-3 w-3 text-red-500 dark:text-red-400\" />\n </button>\n )}\n </EdgeLabelRenderer>\n </g>\n )\n}\n\nexport const ConditionalEdge = memo(ConditionalEdgeComponent)\n","import type { ConnectionLineComponentProps } from '@xyflow/react'\nimport { getBezierPath } from '@xyflow/react'\n\nexport function CustomConnectionLine({\n fromX,\n fromY,\n toX,\n toY,\n fromPosition,\n toPosition,\n}: ConnectionLineComponentProps) {\n const [path] = getBezierPath({\n sourceX: fromX,\n sourceY: fromY,\n sourcePosition: fromPosition,\n targetX: toX,\n targetY: toY,\n targetPosition: toPosition,\n })\n\n return (\n <g>\n <path\n d={path}\n fill=\"none\"\n stroke=\"#14b8a6\"\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n className=\"animate-dash\"\n />\n <circle\n cx={toX}\n cy={toY}\n r={4}\n fill=\"#14b8a6\"\n stroke=\"white\"\n strokeWidth={1.5}\n />\n </g>\n )\n}\n","import { useState, useCallback, useRef, useEffect, memo } from 'react'\nimport {\n ArrowUturnLeftIcon,\n ArrowUturnRightIcon,\n ArrowsPointingInIcon,\n MagnifyingGlassPlusIcon,\n MagnifyingGlassMinusIcon,\n MapIcon,\n CommandLineIcon,\n Bars2Icon,\n CursorArrowRaysIcon,\n HandRaisedIcon,\n Squares2X2Icon,\n ArrowsRightLeftIcon,\n EllipsisHorizontalIcon,\n} from '@heroicons/react/24/outline'\nimport type { CanvasControlMode } from '../../store/workflow-store'\nimport type { WorkflowCardDisplayMode } from '../../types'\nimport type { LayoutDirection } from '../../utils/layout-engine'\n\ninterface DraggableCommandBarProps {\n zoomIn: () => void\n zoomOut: () => void\n onFitView: () => void\n onUndo: () => void\n onRedo: () => void\n canUndo: boolean\n canRedo: boolean\n controlMode: CanvasControlMode\n onControlModeChange: (mode: CanvasControlMode) => void\n showMinimap: boolean\n onToggleMinimap: () => void\n showDots: boolean\n onToggleDots: () => void\n cardDisplayMode: WorkflowCardDisplayMode\n onToggleCardDisplayMode: () => void\n layoutDirection: LayoutDirection\n onLayoutDirectionChange: (direction: LayoutDirection) => void\n showShortcuts: boolean\n onToggleShortcuts: () => void\n onCloseShortcuts: () => void\n tWorkflow: (key: string) => string\n}\n\n/** Frosted glass style applied via inline style so it works regardless of CSS class availability */\n/** CSS class name for liquid glass — defined in globals.css */\nconst GLASS_CLASS = 'liquid-surface'\n\nexport const DraggableCommandBar = memo(function DraggableCommandBar({\n zoomIn,\n zoomOut,\n onFitView,\n onUndo,\n onRedo,\n canUndo,\n canRedo,\n controlMode,\n onControlModeChange,\n showMinimap,\n onToggleMinimap,\n showDots,\n onToggleDots,\n cardDisplayMode,\n onToggleCardDisplayMode,\n layoutDirection,\n onLayoutDirectionChange,\n showShortcuts,\n onToggleShortcuts,\n onCloseShortcuts,\n tWorkflow,\n}: DraggableCommandBarProps) {\n const [position, setPosition] = useState({ x: 16, y: -16 })\n const isDragging = useRef(false)\n const dragOffset = useRef({ x: 0, y: 0 })\n const barRef = useRef<HTMLDivElement>(null)\n\n const handlePointerDown = useCallback((event: React.PointerEvent) => {\n if ((event.target as HTMLElement).closest('button')) return\n isDragging.current = true\n dragOffset.current = {\n x: event.clientX - position.x,\n y: event.clientY - position.y,\n }\n barRef.current?.setPointerCapture(event.pointerId)\n event.preventDefault()\n }, [position.x, position.y])\n\n const handlePointerMove = useCallback((event: React.PointerEvent) => {\n if (!isDragging.current) return\n const newX = event.clientX - dragOffset.current.x\n const newY = event.clientY - dragOffset.current.y\n setPosition({ x: newX, y: newY })\n }, [])\n\n const handlePointerUp = useCallback((event: React.PointerEvent) => {\n isDragging.current = false\n barRef.current?.releasePointerCapture(event.pointerId)\n }, [])\n\n // Close shortcuts panel on Escape key\n useEffect(() => {\n if (!showShortcuts) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onCloseShortcuts()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [showShortcuts, onCloseShortcuts])\n\n const buttonClassName = 'rounded-lg p-1.5 text-gray-600 transition-colors hover:bg-white/40 active:bg-white/60 dark:text-gray-400 dark:hover:bg-white/10 dark:active:bg-white/15'\n const activeButtonClassName = 'rounded-lg p-1.5 transition-colors hover:bg-white/40 dark:hover:bg-white/10 text-indigo-600 dark:text-indigo-400'\n const inactiveButtonClassName = 'rounded-lg p-1.5 transition-colors hover:bg-white/40 dark:hover:bg-white/10 text-gray-400 dark:text-gray-500'\n const dividerClassName = 'mx-0.5 h-4 w-px bg-gray-400/30 dark:bg-white/10'\n\n return (\n <div\n ref={barRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n className={`absolute ${showShortcuts ? 'z-[100]' : 'z-[5]'} select-none`}\n style={{\n left: position.x,\n bottom: position.y > 0 ? undefined : Math.abs(position.y),\n top: position.y > 0 ? position.y : undefined,\n cursor: isDragging.current ? 'grabbing' : 'grab',\n }}\n >\n <div\n className={`${GLASS_CLASS} flex items-center gap-0.5 rounded-2xl px-2 py-1.5`}\n >\n {/* Drag handle */}\n <div className=\"mr-0.5 flex cursor-grab items-center px-0.5 active:cursor-grabbing\">\n <Bars2Icon className=\"h-3.5 w-3.5 text-gray-400/70 dark:text-gray-500/70\" />\n </div>\n\n {/* Pointer / Hand mode toggle */}\n <button\n type=\"button\"\n onClick={() => onControlModeChange('pointer')}\n title={tWorkflow('pointerMode')}\n className={controlMode === 'pointer' ? activeButtonClassName : inactiveButtonClassName}\n >\n <CursorArrowRaysIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onControlModeChange('hand')}\n title={tWorkflow('handMode')}\n className={controlMode === 'hand' ? activeButtonClassName : inactiveButtonClassName}\n >\n <HandRaisedIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Zoom controls */}\n <button type=\"button\" onClick={() => zoomIn()} title=\"Zoom In\" className={buttonClassName}>\n <MagnifyingGlassPlusIcon className=\"h-4 w-4\" />\n </button>\n <button type=\"button\" onClick={() => zoomOut()} title=\"Zoom Out\" className={buttonClassName}>\n <MagnifyingGlassMinusIcon className=\"h-4 w-4\" />\n </button>\n <button type=\"button\" onClick={onFitView} title={tWorkflow('fitView')} className={buttonClassName}>\n <ArrowsPointingInIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Undo / Redo */}\n <button\n type=\"button\"\n onClick={onUndo}\n disabled={!canUndo}\n title={tWorkflow('undo')}\n className={`${buttonClassName} disabled:opacity-30 disabled:hover:bg-transparent`}\n >\n <ArrowUturnLeftIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={onRedo}\n disabled={!canRedo}\n title={tWorkflow('redo')}\n className={`${buttonClassName} disabled:opacity-30 disabled:hover:bg-transparent`}\n >\n <ArrowUturnRightIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Minimap toggle */}\n <button\n type=\"button\"\n onClick={onToggleMinimap}\n title={tWorkflow('toggleMinimap')}\n className={showMinimap ? activeButtonClassName : inactiveButtonClassName}\n >\n <MapIcon className=\"h-4 w-4\" />\n </button>\n {/* Dots (grid background) toggle */}\n <button\n type=\"button\"\n onClick={onToggleDots}\n title={tWorkflow('toggleDots')}\n className={showDots ? activeButtonClassName : inactiveButtonClassName}\n >\n <EllipsisHorizontalIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={onToggleCardDisplayMode}\n title={tWorkflow('toggleCardDisplayMode')}\n className={cardDisplayMode === 'compact' ? activeButtonClassName : inactiveButtonClassName}\n >\n <Squares2X2Icon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Layout mode — cycles Free → LR → TB → Free */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => {\n const cycle: LayoutDirection[] = ['free', 'LR', 'TB']\n const currentIndex = cycle.indexOf(layoutDirection)\n const nextDirection = cycle[(currentIndex + 1) % cycle.length]\n onLayoutDirectionChange(nextDirection)\n }}\n title={tWorkflow('layoutMode')}\n className={layoutDirection !== 'free' ? activeButtonClassName : buttonClassName}\n >\n <ArrowsRightLeftIcon className=\"h-4 w-4\" />\n </button>\n {layoutDirection !== 'free' && (\n <span className=\"pointer-events-none absolute -right-1 -top-1 flex h-3.5 min-w-[14px] items-center justify-center rounded-full bg-indigo-500 px-0.5 text-[7px] font-bold text-white\">\n {layoutDirection}\n </span>\n )}\n </div>\n\n <div className={dividerClassName} />\n\n {/* Keyboard shortcuts */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={onToggleShortcuts}\n title={tWorkflow('shortcuts')}\n className={showShortcuts ? activeButtonClassName : inactiveButtonClassName}\n >\n <CommandLineIcon className=\"h-4 w-4\" />\n </button>\n {showShortcuts && (\n <>\n <div\n className=\"fixed inset-0 z-40 cursor-default\"\n onClick={onCloseShortcuts}\n onPointerDown={(event) => event.stopPropagation()}\n aria-hidden=\"true\"\n />\n <div\n className={`${GLASS_CLASS} absolute bottom-full left-0 z-50 mb-2 w-64 cursor-default rounded-xl p-3 shadow-2xl`}\n onClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <p className=\"mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400\">\n {tWorkflow('shortcuts')}\n </p>\n <div className=\"space-y-1.5\">\n {[\n { keys: 'V', label: tWorkflow('pointerMode') },\n { keys: 'H', label: tWorkflow('handMode') },\n { keys: '⌘ Z', label: tWorkflow('undo') },\n { keys: '⌘ ⇧ Z', label: tWorkflow('redo') },\n { keys: '⌘ C', label: tWorkflow('shortcutCopy') },\n { keys: '⌘ V', label: tWorkflow('shortcutPaste') },\n { keys: '⌘ D', label: tWorkflow('shortcutDuplicate') },\n { keys: '⌘ A', label: tWorkflow('shortcutSelectAll') },\n { keys: '⌘ ⇧ F', label: tWorkflow('fitView') },\n { keys: '⌘ 1', label: tWorkflow('shortcutFitView') },\n { keys: '⌘ +', label: tWorkflow('shortcutZoomIn') },\n { keys: '⌘ -', label: tWorkflow('shortcutZoomOut') },\n { keys: '⇧ 1', label: tWorkflow('shortcutZoom100') },\n { keys: '⇧ 5', label: tWorkflow('shortcutZoom50') },\n { keys: 'Esc', label: tWorkflow('shortcutDeselect') },\n { keys: '⌫', label: tWorkflow('shortcutDelete') },\n { keys: 'L', label: tWorkflow('layoutMode') },\n { keys: 'G', label: tWorkflow('toggleDots') },\n { keys: 'M', label: tWorkflow('toggleMinimap') },\n ].map((shortcut) => (\n <div key={shortcut.keys} className=\"flex items-center justify-between\">\n <span className=\"text-[11px] text-gray-600 dark:text-gray-300\">\n {shortcut.label}\n </span>\n <span className=\"flex items-center gap-0.5\">\n {shortcut.keys.split(' ').map((key) => (\n <kbd\n key={key}\n className=\"inline-flex min-w-[20px] items-center justify-center rounded-md bg-white/60 px-1.5 py-0.5 text-[10px] font-medium text-gray-500 shadow-sm ring-1 ring-inset ring-gray-300/40 dark:bg-white/10 dark:text-gray-400 dark:ring-white/10\"\n >\n {key}\n </kbd>\n ))}\n </span>\n </div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n )\n})\n","/**\n * Entity Visual Helpers\n * =====================\n * Generic appearance helpers for entity nodes independent of hardcoded entity types.\n */\n\nimport {\n CircleStackIcon,\n BuildingStorefrontIcon,\n UsersIcon,\n ShoppingBagIcon,\n ClipboardDocumentCheckIcon,\n ShieldCheckIcon,\n CurrencyDollarIcon,\n ChartBarSquareIcon,\n PresentationChartBarIcon,\n ChartPieIcon,\n} from '@heroicons/react/24/outline'\n\nconst ENTITY_STYLE_PRESETS = [\n {\n gradient: 'from-blue-400 to-blue-600',\n badgeColor: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n handleColor: '!bg-blue-500',\n minimapColor: '#3b82f6',\n },\n {\n gradient: 'from-purple-400 to-purple-600',\n badgeColor: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n handleColor: '!bg-purple-500',\n minimapColor: '#a855f7',\n },\n {\n gradient: 'from-amber-700 to-orange-900',\n badgeColor: 'bg-amber-100 text-amber-800 dark:bg-amber-500/20 dark:text-amber-300',\n handleColor: '!bg-amber-700',\n minimapColor: '#92400e',\n },\n {\n gradient: 'from-emerald-500 to-teal-600',\n badgeColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n handleColor: '!bg-emerald-500',\n minimapColor: '#059669',\n },\n {\n gradient: 'from-rose-500 to-red-600',\n badgeColor: 'bg-rose-100 text-rose-700 dark:bg-rose-500/20 dark:text-rose-300',\n handleColor: '!bg-rose-500',\n minimapColor: '#f43f5e',\n },\n {\n gradient: 'from-cyan-500 to-blue-600',\n badgeColor: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n handleColor: '!bg-cyan-500',\n minimapColor: '#06b6d4',\n },\n] as const\n\nfunction hashString(value: string): number {\n let hash = 0\n for (let index = 0; index < value.length; index += 1) {\n hash = (hash << 5) - hash + value.charCodeAt(index)\n hash |= 0\n }\n return Math.abs(hash)\n}\n\nfunction normalizeEntityKey(entityKey: string | undefined): string {\n return (entityKey ?? 'entity').trim().toLowerCase() || 'entity'\n}\n\nfunction presetFromKey(entityKey: string | undefined) {\n const normalized = normalizeEntityKey(entityKey)\n const presetIndex = hashString(normalized) % ENTITY_STYLE_PRESETS.length\n return ENTITY_STYLE_PRESETS[presetIndex]\n}\n\nconst ENTITY_ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n stations: BuildingStorefrontIcon,\n users: UsersIcon,\n competitors: ShoppingBagIcon,\n approvals: ClipboardDocumentCheckIcon,\n rules: ShieldCheckIcon,\n current_prices: CurrencyDollarIcon,\n competitor_prices: ChartBarSquareIcon,\n product_metrics: ChartPieIcon,\n station_metrics: PresentationChartBarIcon,\n entities: CircleStackIcon,\n}\n\nexport function getEntityIcon(entityKey: string | undefined): React.ComponentType<{ className?: string }> {\n const normalized = normalizeEntityKey(entityKey)\n return ENTITY_ICON_MAP[normalized] ?? CircleStackIcon\n}\n\nexport function getEntityGradient(entityKey: string | undefined): string {\n return presetFromKey(entityKey).gradient\n}\n\nexport function getEntityBadgeColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).badgeColor\n}\n\nexport function getEntityHandleColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).handleColor\n}\n\nexport function getEntityMinimapColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).minimapColor\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n XMarkIcon,\n PlusIcon,\n MagnifyingGlassIcon,\n ServerStackIcon,\n TableCellsIcon,\n FunnelIcon,\n CircleStackIcon,\n CheckIcon,\n VariableIcon,\n Cog6ToothIcon,\n} from '@heroicons/react/24/outline'\nimport { GlassModal, type GlassModalSection } from '@ui/components/glass-modal'\nimport { Button } from '@ui/components/button'\nimport type { DatasourceNodeConfig, DatasourceFilter, DatasourceFilterOp } from '../../contracts'\n\ntype DatasourceDefinition = {\n id: string\n name: string\n dialect: string\n}\n\ntype ColumnDefinition = {\n name: string\n type: string\n nullable?: boolean\n}\n\nconst DATASOURCE_LOGOS: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n mysql: '/logos/datasources/mysql.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDatasourceLogo(datasourceId: string, dialect?: string): string | null {\n const search = (dialect ?? datasourceId).toLowerCase()\n for (const [key, url] of Object.entries(DATASOURCE_LOGOS)) {\n if (search.includes(key)) return url\n }\n return null\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n string: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n varchar: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n text: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n integer: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n int: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n bigint: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n number: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n decimal: 'bg-indigo-500/10 text-indigo-600 dark:text-indigo-400',\n float: 'bg-indigo-500/10 text-indigo-600 dark:text-indigo-400',\n boolean: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n date: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n timestamp: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n datetime: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n json: 'bg-violet-500/10 text-violet-600 dark:text-violet-400',\n jsonb: 'bg-violet-500/10 text-violet-600 dark:text-violet-400',\n uuid: 'bg-teal-500/10 text-teal-600 dark:text-teal-400',\n array: 'bg-pink-500/10 text-pink-600 dark:text-pink-400',\n}\n\nexport type DatasourceNodeConfigFormProps = {\n open: boolean\n nodeId: string\n config: DatasourceNodeConfig\n onSave: (config: DatasourceNodeConfig) => void\n onCancel: () => void\n datasources: DatasourceDefinition[]\n onLoadTables: (datasourceId: string) => Promise<string[]>\n onLoadSchema: (datasourceId: string, table: string) => Promise<ColumnDefinition[]>\n readOnly?: boolean\n}\n\nconst SIDEBAR_SECTIONS: GlassModalSection[] = [\n { id: 'connection', label: 'Connection', icon: CircleStackIcon },\n { id: 'table', label: 'Table', icon: TableCellsIcon },\n { id: 'columns', label: 'Columns', icon: TableCellsIcon },\n { id: 'filters', label: 'Filters', icon: FunnelIcon },\n { id: 'output', label: 'Output', icon: Cog6ToothIcon },\n]\n\nexport function DatasourceNodeConfigForm({\n open,\n nodeId,\n config,\n onSave,\n onCancel,\n datasources,\n onLoadTables,\n onLoadSchema,\n readOnly = false,\n}: DatasourceNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.datasourceNodeConfig')\n\n const [activeSectionId, setActiveSectionId] = useState('connection')\n const [selectedDatasourceId, setSelectedDatasourceId] = useState(config.datasourceId ?? '')\n const [selectedTable, setSelectedTable] = useState(config.table ?? '')\n const [availableTables, setAvailableTables] = useState<string[]>([])\n const [availableColumns, setAvailableColumns] = useState<ColumnDefinition[]>([])\n const [selectedColumns, setSelectedColumns] = useState<string[]>([...(config.selectedColumns ?? [])])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [limit, setLimit] = useState(config.limit)\n // Filters now use the richer `{column, op, value}` array shape. We\n // seed state from `config.filters` when present; otherwise we fall\n // back to the legacy `filterVariables` map (variable → column) and\n // convert it to implicit-`eq` rows so older graphs edit cleanly.\n const [filters, setFilters] = useState<DatasourceFilter[]>(() => {\n if (config.filters && config.filters.length > 0) return [...config.filters]\n const legacy: DatasourceFilter[] = Object.entries(config.filterVariables ?? {})\n .filter(([variableName, column]) => variableName && column)\n .map(([variableName, column]) => ({\n column: column as string,\n op: 'eq',\n value: `{{ inputs.${variableName} }}`,\n }))\n return legacy\n })\n const [tableSearch, setTableSearch] = useState('')\n const [columnSearch, setColumnSearch] = useState('')\n\n const allColumnNames = availableColumns.map((column) => column.name)\n const allSelected = selectedColumns.length > 0 && selectedColumns.length === allColumnNames.length\n const selectedDatasource = datasources.find((datasource) => datasource.id === selectedDatasourceId)\n\n const filteredTables = useMemo(\n () => tableSearch ? availableTables.filter((table) => table.toLowerCase().includes(tableSearch.toLowerCase())) : availableTables,\n [availableTables, tableSearch]\n )\n const filteredColumns = useMemo(\n () => columnSearch ? availableColumns.filter((column) => column.name.toLowerCase().includes(columnSearch.toLowerCase())) : availableColumns,\n [availableColumns, columnSearch]\n )\n\n const loadTables = useCallback(async (datasourceId: string) => {\n if (!datasourceId) { setAvailableTables([]); return }\n const tables = await onLoadTables(datasourceId)\n setAvailableTables(tables)\n }, [onLoadTables])\n\n const loadSchema = useCallback(async (datasourceId: string, table: string) => {\n if (!datasourceId || !table) { setAvailableColumns([]); return }\n const columns = await onLoadSchema(datasourceId, table)\n setAvailableColumns(columns)\n }, [onLoadSchema])\n\n useEffect(() => { if (selectedDatasourceId) loadTables(selectedDatasourceId) }, [selectedDatasourceId, loadTables])\n useEffect(() => { if (selectedDatasourceId && selectedTable) loadSchema(selectedDatasourceId, selectedTable) }, [selectedDatasourceId, selectedTable, loadSchema])\n\n const handleDatasourceChange = (datasourceId: string) => {\n setSelectedDatasourceId(datasourceId)\n setSelectedTable('')\n setAvailableTables([])\n setAvailableColumns([])\n setSelectedColumns([])\n setFilters([])\n setTableSearch('')\n setColumnSearch('')\n }\n\n const handleTableChange = (table: string) => {\n setSelectedTable(table)\n setAvailableColumns([])\n setSelectedColumns([])\n setFilters([])\n setColumnSearch('')\n }\n\n const handleToggleColumn = (columnName: string) => {\n setSelectedColumns((previous) =>\n previous.includes(columnName) ? previous.filter((name) => name !== columnName) : [...previous, columnName]\n )\n }\n\n const handleAddFilter = () => {\n setFilters((previous) => [...previous, { column: '', op: 'eq', value: '' }])\n }\n\n const handleUpdateFilterColumn = (index: number, nextColumn: string) => {\n setFilters((previous) => previous.map((row, i) => (i === index ? { ...row, column: nextColumn } : row)))\n }\n\n const handleUpdateFilterOp = (index: number, nextOp: DatasourceFilterOp) => {\n setFilters((previous) => previous.map((row, i) => {\n if (i !== index) return row\n // Swapping to `in` requires an array value — coerce an existing\n // scalar into a single-element array so the author doesn't lose\n // their typing. Swapping back to a scalar op keeps the first\n // element.\n if (nextOp === 'in') {\n const arr = Array.isArray(row.value) ? row.value : (row.value == null || row.value === '' ? [] : [row.value])\n return { ...row, op: nextOp, value: arr }\n }\n if (Array.isArray(row.value)) {\n return { ...row, op: nextOp, value: row.value[0] ?? '' }\n }\n return { ...row, op: nextOp }\n }))\n }\n\n const handleUpdateFilterValue = (index: number, nextValue: string) => {\n setFilters((previous) => previous.map((row, i) => {\n if (i !== index) return row\n if (row.op === 'in') {\n // Comma-separated list → array. Trimmed, empties dropped.\n const arr = nextValue.split(',').map((s) => s.trim()).filter((s) => s.length > 0)\n return { ...row, value: arr }\n }\n return { ...row, value: nextValue }\n }))\n }\n\n const handleRemoveFilter = (index: number) => {\n setFilters((previous) => previous.filter((_, i) => i !== index))\n }\n\n const handleSave = () => {\n const cleaned = filters\n .filter((row) => row.column.trim())\n .map<DatasourceFilter>((row) => {\n const op = (row.op ?? 'eq') as DatasourceFilterOp\n if (op === 'in') {\n const arr = Array.isArray(row.value) ? row.value : []\n return { column: row.column.trim(), op, value: arr }\n }\n return { column: row.column.trim(), op, value: row.value ?? '' }\n })\n onSave({\n ...config,\n datasourceId: selectedDatasourceId,\n dialect: selectedDatasource?.dialect ?? '',\n table: selectedTable,\n selectedColumns,\n outputVariable: outputVariable.trim(),\n limit,\n filters: cleaned,\n // Clear the legacy field so the engine's back-compat path doesn't\n // double-apply filters after a round-trip through this form.\n filterVariables: undefined,\n })\n }\n\n const filterEntries = filters\n const canSave = selectedDatasourceId && selectedTable && selectedColumns.length > 0\n\n // ── Section content ─────────────────────────────────────────────────\n\n function renderSection() {\n switch (activeSectionId) {\n case 'connection':\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('datasourceHelp')}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {datasources.map((datasource) => {\n const isSelected = datasource.id === selectedDatasourceId\n const logo = getDatasourceLogo(datasource.id, datasource.dialect)\n return (\n <button\n key={datasource.id}\n type=\"button\"\n onClick={() => { if (!readOnly) { handleDatasourceChange(datasource.id); setActiveSectionId('table') } }}\n disabled={readOnly && datasource.id !== selectedDatasourceId}\n className={`flex items-center gap-3 rounded-xl border px-3 py-2.5 text-left transition-all ${\n isSelected\n ? 'border-cyan-500/50 bg-cyan-500/5 ring-1 ring-cyan-500/20 dark:border-cyan-400/40 dark:bg-cyan-400/5'\n : 'border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm dark:border-white/10 dark:bg-white/[0.03] dark:hover:border-white/20'\n }`}\n >\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center\">\n {logo ? (\n <img src={logo} alt={datasource.dialect} className=\"h-7 w-7\" />\n ) : (\n <ServerStackIcon className=\"h-6 w-6 text-gray-400\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-xs font-semibold text-gray-900 dark:text-white\">{datasource.name}</p>\n <p className=\"text-[10px] text-gray-400 dark:text-gray-500\">{datasource.dialect}</p>\n </div>\n {isSelected && <CheckIcon className=\"h-4 w-4 shrink-0 text-cyan-500 dark:text-cyan-400\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n\n case 'table':\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('tableHelp')}</p>\n {!selectedDatasourceId ? (\n <p className=\"py-8 text-center text-xs text-gray-400\">{t('selectDatasource')}</p>\n ) : (\n <div className=\"liquid-surface rounded-xl border border-white/30 dark:border-white/10\">\n <div className=\"flex items-center gap-2 border-b border-gray-200/50 px-3 py-2 dark:border-white/5\">\n <MagnifyingGlassIcon className=\"h-3.5 w-3.5 text-gray-400\" />\n <input\n type=\"text\"\n value={tableSearch}\n onChange={(event) => setTableSearch(event.target.value)}\n placeholder={t('selectTable')}\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n {availableTables.length > 0 && (\n <span className=\"text-[10px] text-gray-400\">{availableTables.length}</span>\n )}\n </div>\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {filteredTables.length === 0 && (\n <p className=\"px-3 py-6 text-center text-[10px] text-gray-400\">{t('noColumnsAvailable')}</p>\n )}\n {filteredTables.map((table) => {\n const isSelected = table === selectedTable\n return (\n <button\n key={table}\n type=\"button\"\n onClick={() => { if (!readOnly) { handleTableChange(table); setActiveSectionId('columns') } }}\n className={`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-cyan-500/10 font-semibold text-cyan-700 dark:text-cyan-300'\n : 'text-gray-700 hover:bg-gray-100/60 dark:text-gray-300 dark:hover:bg-white/5'\n }`}\n >\n <TableCellsIcon className=\"h-3.5 w-3.5 shrink-0 text-gray-400\" />\n <span className=\"truncate\">{table}</span>\n {isSelected && <CheckIcon className=\"ml-auto h-3.5 w-3.5 shrink-0 text-cyan-500\" />}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n\n case 'columns':\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {selectedColumns.length}/{availableColumns.length} selected\n </p>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={() => setSelectedColumns(allSelected ? [] : [...allColumnNames])}\n disabled={availableColumns.length === 0}\n className=\"text-[10px] font-semibold text-cyan-600 hover:text-cyan-700 disabled:opacity-40 dark:text-cyan-400\"\n >\n {allSelected ? t('deselectAll') : t('selectAll')}\n </button>\n )}\n </div>\n\n {!selectedTable ? (\n <p className=\"py-8 text-center text-xs text-gray-400\">{t('selectTable')}</p>\n ) : (\n <div className=\"liquid-surface rounded-xl border border-white/30 dark:border-white/10\">\n <div className=\"flex items-center gap-2 border-b border-gray-200/50 px-3 py-2 dark:border-white/5\">\n <MagnifyingGlassIcon className=\"h-3.5 w-3.5 text-gray-400\" />\n <input\n type=\"text\"\n value={columnSearch}\n onChange={(event) => setColumnSearch(event.target.value)}\n placeholder=\"Search columns...\"\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {filteredColumns.length === 0 && (\n <p className=\"px-3 py-6 text-center text-[10px] text-gray-400\">{t('noColumnsAvailable')}</p>\n )}\n {filteredColumns.map((column) => {\n const isSelected = selectedColumns.includes(column.name)\n const typeColor = TYPE_COLORS[column.type.toLowerCase()] ?? TYPE_COLORS.string\n return (\n <button\n key={column.name}\n type=\"button\"\n onClick={() => { if (!readOnly) handleToggleColumn(column.name) }}\n className={`flex w-full items-center gap-2 rounded-lg px-3 py-1.5 text-left transition-colors ${\n isSelected ? 'bg-cyan-500/8 dark:bg-cyan-400/5' : 'hover:bg-gray-100/60 dark:hover:bg-white/5'\n }`}\n >\n <div className={`flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors ${\n isSelected ? 'border-cyan-500 bg-cyan-500 dark:border-cyan-400 dark:bg-cyan-400' : 'border-gray-300 dark:border-gray-600'\n }`}>\n {isSelected && <CheckIcon className=\"h-2.5 w-2.5 text-white\" />}\n </div>\n <span className=\"flex-1 truncate text-xs text-gray-900 dark:text-white\">\n {column.name}\n {column.nullable && <span className=\"ml-1 text-[9px] text-gray-400\">?</span>}\n </span>\n <span className={`shrink-0 rounded-full px-1.5 py-0.5 text-[9px] font-medium ${typeColor}`}>\n {column.type}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n\n case 'filters':\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('filtersHelp')}</p>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 text-[10px] font-semibold text-cyan-600 hover:text-cyan-700 dark:text-cyan-400\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n )}\n </div>\n\n {filterEntries.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8\">\n <FunnelIcon className=\"h-8 w-8 text-gray-300 dark:text-gray-600\" />\n <p className=\"text-xs text-gray-400\">No filters configured</p>\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 rounded-lg bg-cyan-500/10 px-3 py-1.5 text-[10px] font-semibold text-cyan-600 hover:bg-cyan-500/15 dark:text-cyan-400\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {filterEntries.map((row, index) => {\n const currentOp = (row.op ?? 'eq') as DatasourceFilterOp\n const valueDisplay = Array.isArray(row.value)\n ? row.value.map(String).join(', ')\n : (row.value == null ? '' : String(row.value))\n return (\n <div key={index} className=\"flex items-center gap-2 rounded-xl border border-gray-200 bg-white px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]\">\n {/* Column */}\n <select\n value={row.column}\n onChange={(event) => handleUpdateFilterColumn(index, event.target.value)}\n disabled={readOnly}\n className=\"w-[28%] rounded bg-transparent text-xs text-gray-900 outline-none disabled:opacity-60 dark:text-white\"\n >\n <option value=\"\">{t('columnName')}</option>\n {availableColumns.map((column) => (\n <option key={column.name} value={column.name}>{column.name}</option>\n ))}\n </select>\n {/* Operator — the headline of #87 */}\n <select\n value={currentOp}\n onChange={(event) => handleUpdateFilterOp(index, event.target.value as DatasourceFilterOp)}\n disabled={readOnly}\n className=\"w-[18%] rounded bg-gray-50 px-1 text-center text-[10px] font-semibold uppercase text-gray-700 outline-none disabled:opacity-60 dark:bg-white/[0.05] dark:text-gray-200\"\n title={t('filterOperator', { _: 'Filter operator' } as never)}\n >\n <option value=\"eq\">= (eq)</option>\n <option value=\"neq\">≠ (neq)</option>\n <option value=\"lt\">&lt; (lt)</option>\n <option value=\"lte\">≤ (lte)</option>\n <option value=\"gt\">&gt; (gt)</option>\n <option value=\"gte\">≥ (gte)</option>\n <option value=\"like\">LIKE</option>\n <option value=\"in\">IN (…)</option>\n </select>\n {/* Value — scalar input, or comma-separated for `in` */}\n <input\n type=\"text\"\n value={valueDisplay}\n onChange={(event) => handleUpdateFilterValue(index, event.target.value)}\n placeholder={currentOp === 'in' ? 'comma-separated, e.g. SP, RJ, MG' : t('variableReference')}\n readOnly={readOnly}\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n {!readOnly && (\n <button\n type=\"button\"\n onClick={() => handleRemoveFilter(index)}\n className=\"shrink-0 rounded-md p-1 text-gray-400 transition-colors hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-900/20\"\n >\n <XMarkIcon className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n\n case 'output':\n return (\n <div className=\"space-y-5\">\n <div>\n <label className=\"mb-1.5 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('outputVariableLabel')}</label>\n <p className=\"mb-2 text-[10px] text-gray-500 dark:text-gray-400\">{t('outputVariableHelp')}</p>\n <div className=\"flex items-center gap-2 rounded-xl border border-gray-200 bg-white px-3 py-2.5 dark:border-white/10 dark:bg-white/[0.03]\">\n <VariableIcon className=\"h-4 w-4 text-gray-400\" />\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder=\"datasourceResult\"\n readOnly={readOnly}\n className=\"flex-1 bg-transparent text-sm text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('limitLabel')}</label>\n <p className=\"mb-2 text-[10px] text-gray-500 dark:text-gray-400\">{t('limitHelp')}</p>\n <input\n type=\"number\"\n value={limit}\n onChange={(event) => setLimit(Math.max(1, Number.parseInt(event.target.value, 10) || 1))}\n min={1}\n max={10000}\n readOnly={readOnly}\n className=\"w-32 rounded-xl border border-gray-200 bg-white px-3 py-2.5 text-sm text-gray-900 outline-none focus:border-cyan-400 dark:border-white/10 dark:bg-white/[0.03] dark:text-white\"\n />\n </div>\n\n {/* Summary */}\n {selectedDatasource && selectedTable && (\n <div className=\"rounded-xl border border-cyan-500/20 bg-cyan-500/5 p-3 dark:border-cyan-400/15 dark:bg-cyan-400/5\">\n <p className=\"text-[10px] font-semibold uppercase tracking-wider text-cyan-600 dark:text-cyan-400 mb-2\">Summary</p>\n <div className=\"space-y-1 text-xs text-gray-600 dark:text-gray-300\">\n <p><span className=\"text-gray-400\">Source:</span> {selectedDatasource.name} ({selectedDatasource.dialect})</p>\n <p><span className=\"text-gray-400\">Table:</span> {selectedTable}</p>\n <p><span className=\"text-gray-400\">Columns:</span> {selectedColumns.length} of {availableColumns.length}</p>\n <p><span className=\"text-gray-400\">Filters:</span> {filterEntries.length}</p>\n <p><span className=\"text-gray-400\">Limit:</span> {limit}</p>\n <p><span className=\"text-gray-400\">Output:</span> {outputVariable || '—'}</p>\n </div>\n </div>\n )}\n </div>\n )\n\n default:\n return null\n }\n }\n\n const logo = getDatasourceLogo(selectedDatasourceId, selectedDatasource?.dialect)\n\n return (\n <GlassModal\n open={open}\n onClose={onCancel}\n title={selectedDatasource?.name ?? t('datasourceLabel')}\n subtitle={selectedTable ? `${selectedDatasource?.dialect} · ${selectedTable}` : undefined}\n icon={logo ? <img src={logo} alt=\"\" className=\"h-5 w-5\" /> : <ServerStackIcon className=\"h-5 w-5 text-white\" />}\n gradient=\"from-cyan-500 to-blue-600\"\n maxWidth=\"3xl\"\n sidebar={{\n sections: SIDEBAR_SECTIONS,\n activeSectionId,\n onSectionChange: setActiveSectionId,\n }}\n footer={readOnly ? undefined : (\n <div className=\"flex justify-end gap-2 px-6 py-3\">\n <Button outline onClick={onCancel}>{t('cancel')}</Button>\n <Button color=\"cyan\" onClick={handleSave} disabled={!canSave}>{t('save')}</Button>\n </div>\n )}\n >\n {renderSection()}\n </GlassModal>\n )\n}\n","/**\n * Agent framework icons — LangChain, CrewAI, Google ADK, Anthropic Claude Agent SDK.\n * SVG paths sourced from simple-icons where available.\n */\n\nexport type AgentFramework = 'langchain' | 'crewai' | 'google-adk' | 'anthropic' | 'strands' | 'openai' | 'custom'\n\ntype FrameworkIconProps = { className?: string }\n\nexport function LangChainIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"LangChain\">\n <path d=\"M6.0988 5.9175C2.7359 5.9175 0 8.6462 0 12s2.736 6.0825 6.0988 6.0825h11.8024C21.2641 18.0825 24 15.3538 24 12s-2.736-6.0825-6.0988-6.0825ZM5.9774 7.851c.493.0124 1.02.2496 1.273.6228.3673.4592.4778 1.0668.8944 1.4932.5604.6118 1.199 1.1505 1.7161 1.802.4892.5954.8386 1.2937 1.1436 1.9975.1244.2335.1257.5202.31.7197.0908.1204.5346.4483.4383.5645.0555.1204.4702.286.3263.4027-.1944.04-.4129.0476-.5616-.1074-.0549.126-.183.0596-.2819.0432a4 4 0 0 0-.025.0736c-.3288.0219-.5754-.3126-.732-.565-.3111-.168-.6642-.2702-.982-.446-.0182.2895.0452.6485-.231.8353-.014.5565.8436.0656.9222.4804-.061.0067-.1286-.0095-.1774.0373-.2239.2172-.4805-.1645-.7385-.007-.3464.174-.3808.3161-.8096.352-.0237-.0359-.0143-.0592.0059-.0811.1207-.1399.1295-.3046.3356-.3643-.2122-.0334-.3899.0833-.5686.1757-.2323.095-.2304-.2141-.5878.0164-.0396-.0322-.0208-.0615.0018-.0864.0908-.1107.2102-.127.345-.1208-.663-.3686-.9751.4507-1.2813.0432-.092.0243-.1265.1068-.1845.1652-.05-.0548-.0123-.1212-.0099-.1857-.0598-.028-.1356-.041-.1179-.1366-.1171-.0395-.1988.0295-.286.0952-.0787-.0608.0532-.1492.0776-.2125.0702-.1216.23-.025.3111-.1126.2306-.1308.552.0814.8155.0455.203.0255.4544-.1825.3526-.39-.2171-.2767-.179-.6386-.1839-.9695-.0268-.1929-.491-.4382-.6252-.6462-.1659-.1873-.295-.4047-.4243-.6182-.4666-.9008-.3198-2.0584-.9077-2.8947-.266.1466-.6125.0774-.8418-.119-.1238.1125-.1292.2598-.139.4161-.297-.2962-.2593-.8559-.022-1.1855.0969-.1302.2127-.2373.342-.3316.0292-.0213.0391-.0419.0385-.0747.1174-.5267.5764-.7391 1.0694-.7267m12.4071.46c.5575 0 1.0806.2159 1.474.6082s.61.9145.61 1.4704c0 .556-.2167 1.078-.61 1.4698v.0006l-.902.8995a2.08 2.08 0 0 1-.8597.5166l-.0164.0047-.0058.0164a2.05 2.05 0 0 1-.474.7308l-.9018.8995c-.3934.3924-.917.6083-1.4745.6083s-1.0806-.216-1.474-.6083c-.813-.8107-.813-2.1294 0-2.9402l.9019-.8995a2.056 2.056 0 0 1 .858-.5143l.017-.0053.0058-.0158a2.07 2.07 0 0 1 .4752-.7337l.9018-.8995c.3934-.3924.9171-.6083 1.4745-.6083zm0 .8965a1.18 1.18 0 0 0-.8388.3462l-.9018.8995a1.181 1.181 0 0 0-.3427.9252l.0053.0572c.0323.2652.149.5044.3374.6917.13.1296.2733.2114.4471.2686a.9.9 0 0 1 .014.1582.884.884 0 0 1-.2609.6304l-.0554.0554c-.3013-.1028-.5525-.253-.7794-.4792a2.06 2.06 0 0 1-.5761-1.0968l-.0099-.0578-.0461.0368a1.1 1.1 0 0 0-.0876.0794l-.9024.8995c-.4623.461-.4623 1.212 0 1.673.2311.2305.535.346.8394.3461.3043 0 .6077-.1156.8388-.3462l.9019-.8995c.4623-.461.4623-1.2113 0-1.673a1.17 1.17 0 0 0-.4367-.2749 1 1 0 0 1-.014-.1611c0-.2591.1023-.505.2901-.6923.3019.1028.57.2694.7962.495.3007.2999.4994.679.5756 1.0968l.0105.0578.0455-.0373a1.1 1.1 0 0 0 .0887-.0794l.902-.8996c.4622-.461.4628-1.2124 0-1.6735a1.18 1.18 0 0 0-.8395-.3462Zm-9.973 5.1567-.0006.0006c-.0793.3078-.1048.8318-.506.847-.033.1776.1228.2445.2655.1874.141-.0645.2081.0508.2557.1657.2177.0317.5394-.0725.5516-.3298-.325-.1867-.4253-.5418-.5662-.8709\" />\n </svg>\n )\n}\n\nexport function CrewAIIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"CrewAI\">\n <path d=\"M12.482.18C7.161 1.319 1.478 9.069 1.426 15.372c-.051 5.527 3.1 8.68 8.68 8.627 6.716-.05 14.259-6.87 12.09-10.9-.672-1.292-1.396-1.344-2.687-.207-1.602 1.395-1.654.31-.207-2.893 1.757-3.98 1.705-5.322-.31-7.544C17.03.388 14.962-.388 12.482.181Zm5.322 2.068c2.273 2.015 2.376 4.236.465 8.42-1.395 3.1-2.17 3.515-3.824 1.86-1.24-1.24-1.343-3.46-.258-6.044 1.137-2.635.982-3.1-.568-1.653-3.72 3.358-6.458 9.765-5.424 12.503.464 1.189.825 1.395 2.737 1.395 2.79 0 6.303-1.705 7.957-3.926 1.756-2.274 2.79-2.274 2.79-.052 0 3.875-6.459 8.627-11.625 8.627-6.251 0-9.351-4.752-7.491-11.47.878-2.995 4.443-7.904 7.077-9.66 3.255-2.17 5.684-2.17 8.164 0z\" />\n </svg>\n )\n}\n\nexport function AnthropicIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"Anthropic\">\n <path d=\"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z\" />\n </svg>\n )\n}\n\nexport function GoogleADKIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" className={className} aria-label=\"Google ADK\">\n {/* Robot face — rounded capsule with two eyes */}\n <path d=\"M7 5.5C4.5 5.5 2.5 7.5 2.5 10v1c0 2.5 2 4.5 4.5 4.5h10c2.5 0 4.5-2 4.5-4.5v-1c0-2.5-2-4.5-4.5-4.5H7Z\" stroke=\"#4285F4\" strokeWidth=\"2\" fill=\"none\" />\n <path d=\"M14.5 5.5C14.5 5.5 16 4 17 5.5\" stroke=\"#34A853\" strokeWidth=\"2\" strokeLinecap=\"round\" fill=\"none\" />\n <circle cx=\"9\" cy=\"10.5\" r=\"1.2\" fill=\"#4285F4\" />\n <circle cx=\"15\" cy=\"10.5\" r=\"1.2\" fill=\"#4285F4\" />\n {/* Code brackets below */}\n <path d=\"M4 18.5V20.5H5.5\" stroke=\"#FBBC04\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 17L7 19.5L9 22\" stroke=\"#EA4335\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15 17L17 19.5L15 22\" stroke=\"#EA4335\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function StrandsIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 300 462\" fill=\"currentColor\" className={className} aria-label=\"Strands\">\n <path d=\"M97.29 52.79C85.07 49.17 72.22 56.14 68.6 68.36C64.98 80.58 71.95 93.43 84.17 97.05L235.12 139.78C245.22 142.77 246.36 156.63 236.87 161.23L32.55 260.29C-14.94 283.32-9.16 352.74 41.48 367.59L189.55 411.01L190.13 411.17C202.18 414.38 214.67 407.4 218.2 395.36C221.78 383.12 214.77 370.3 202.54 366.71L54.47 323.29C44.34 320.32 43.19 306.44 52.69 301.83L257.01 202.77C304.43 179.78 298.76 110.48 248.23 95.51L97.29 52.79Z\" opacity=\"0.6\" />\n <path d=\"M259.15 0.98C271.39-2.57 284.2 4.47 287.75 16.71C291.31 28.95 284.27 41.76 272.03 45.31L71.17 103.67C40.71 112.52 37.2 154.26 65.75 168.08L241.34 253.09C307.87 285.3 299.79 382.55 228.86 403.34L30.4 461.5C18.17 465.09 5.35 458.08 1.76 445.84C-1.82 433.61 5.19 420.79 17.42 417.2L215.88 359.04C246.28 350.13 249.74 308.45 221.23 294.65L45.63 209.64C-20.98 177.39-12.78 79.99 58.29 59.34L259.15 0.98Z\" />\n </svg>\n )\n}\n\nexport function OpenAIIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className={className} aria-label=\"OpenAI\">\n <path d=\"M14.949 6.547a3.94 3.94 0 0 0-.348-3.273 4.11 4.11 0 0 0-4.4-1.934A4.1 4.1 0 0 0 8.423.2 4.15 4.15 0 0 0 6.305.086a4.1 4.1 0 0 0-1.891.948 4.04 4.04 0 0 0-1.158 1.753 4.1 4.1 0 0 0-1.563.679A4 4 0 0 0 .554 4.72a3.99 3.99 0 0 0 .502 4.731 3.94 3.94 0 0 0 .346 3.274 4.11 4.11 0 0 0 4.402 1.933c.382.425.852.764 1.377.995.526.231 1.095.35 1.67.346 1.78.002 3.358-1.132 3.901-2.804a4.1 4.1 0 0 0 1.563-.68 4 4 0 0 0 1.14-1.253 3.99 3.99 0 0 0-.506-4.716m-6.097 8.406a3.05 3.05 0 0 1-1.945-.694l.096-.054 3.23-1.838a.53.53 0 0 0 .265-.455v-4.49l1.366.778q.02.011.025.035v3.722c-.003 1.653-1.361 2.992-3.037 2.996m-6.53-2.75a2.95 2.95 0 0 1-.36-2.01l.095.057L5.29 12.09a.53.53 0 0 0 .527 0l3.949-2.246v1.555a.05.05 0 0 1-.022.041L6.473 13.3c-1.454.826-3.311.335-4.15-1.098m-.85-6.94A3.02 3.02 0 0 1 3.07 3.949v3.785a.51.51 0 0 0 .262.451l3.93 2.237-1.366.779a.05.05 0 0 1-.048 0L2.585 9.342a2.98 2.98 0 0 1-1.113-4.094zm11.216 2.571L8.747 5.576l1.362-.776a.05.05 0 0 1 .048 0l3.265 1.86a3 3 0 0 1 1.173 1.207 2.96 2.96 0 0 1-.27 3.2 3.05 3.05 0 0 1-1.36.997V8.279a.52.52 0 0 0-.276-.445m1.36-2.015-.097-.057-3.226-1.855a.53.53 0 0 0-.53 0L6.249 6.153V4.598a.04.04 0 0 1 .019-.04L9.533 2.7a3.07 3.07 0 0 1 3.257.139c.474.325.843.778 1.066 1.303.223.526.289 1.103.191 1.664zM5.503 8.575 4.139 7.8a.05.05 0 0 1-.026-.037V4.049c0-.57.166-1.127.476-1.607s.752-.864 1.275-1.105a3.08 3.08 0 0 1 3.234.41l-.096.054-3.23 1.838a.53.53 0 0 0-.265.455zm.742-1.577 1.758-1 1.762 1v2l-1.755 1-1.762-1z\" />\n </svg>\n )\n}\n\n/** Color + label metadata for each framework */\nexport const FRAMEWORK_META: Record<AgentFramework, {\n label: string\n color: string\n badgeColor: string\n IconComponent: (props: FrameworkIconProps) => React.ReactNode\n}> = {\n langchain: {\n label: 'LangChain',\n color: '#1C3C3C',\n badgeColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n IconComponent: LangChainIcon,\n },\n crewai: {\n label: 'CrewAI',\n color: '#FF5A50',\n badgeColor: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n IconComponent: CrewAIIcon,\n },\n 'google-adk': {\n label: 'Google ADK',\n color: '#4285F4',\n badgeColor: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n IconComponent: GoogleADKIcon,\n },\n anthropic: {\n label: 'Claude Agent SDK',\n color: '#D4A574',\n badgeColor: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n IconComponent: AnthropicIcon,\n },\n strands: {\n label: 'Strands',\n color: '#FF9900',\n badgeColor: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n IconComponent: StrandsIcon,\n },\n openai: {\n label: 'OpenAI SDK',\n color: '#10A37F',\n badgeColor: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n IconComponent: OpenAIIcon,\n },\n custom: {\n label: 'Custom',\n color: '#6366F1',\n badgeColor: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n IconComponent: ({ className }: FrameworkIconProps) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"Custom\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n ),\n },\n}\n\n/** Get the framework icon + metadata for a given framework key */\nexport function getFrameworkMeta(framework: string | undefined) {\n if (!framework) return FRAMEWORK_META.custom\n return FRAMEWORK_META[framework as AgentFramework] ?? FRAMEWORK_META.custom\n}\n\n/**\n * Model provider compatibility per framework.\n * - anthropic (Claude Agent SDK): Claude models only\n * - google-adk: Gemini primary, Claude via connectors — no Meta/Amazon\n * - langchain: All providers (50+)\n * - crewai: All providers (native + LiteLLM fallback)\n * - custom: All providers\n */\nconst FRAMEWORK_ALLOWED_PROVIDERS: Record<AgentFramework, string[] | 'all'> = {\n anthropic: ['anthropic'],\n 'google-adk': ['anthropic', 'google'],\n openai: ['openai'],\n strands: 'all',\n langchain: 'all',\n crewai: 'all',\n custom: 'all',\n}\n\n/** Check if a model ID is compatible with a framework */\nexport function isModelCompatibleWithFramework(modelId: string, framework: AgentFramework): boolean {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return true\n const provider = modelId.split('.')[0]\n return allowed.includes(provider)\n}\n\n/**\n * Check if a framework is compatible with a set of model provider types.\n * Provider types are: 'anthropic', 'openai', 'google', 'amazon', 'meta', etc.\n * Maps provider types to model ID prefixes for compatibility checking.\n */\nconst PROVIDER_TYPE_TO_MODEL_PROVIDERS: Record<string, string[]> = {\n aws_bedrock: ['anthropic', 'amazon', 'meta', 'mistral'],\n openai_api: ['openai'],\n google_vertex: ['google'],\n azure_openai: ['openai'],\n anthropic_api: ['anthropic'],\n groq: ['meta', 'mistral'],\n mistral: ['mistral'],\n huggingface: ['meta', 'mistral'],\n ollama: ['meta', 'mistral'],\n // Also handle raw provider names (from ModelProvider.provider field)\n anthropic: ['anthropic'],\n amazon: ['anthropic', 'amazon', 'meta'],\n google: ['google'],\n openai: ['openai'],\n meta: ['meta'],\n}\n\nexport function isFrameworkCompatibleWithProviders(framework: AgentFramework, providerTypes: string[]): boolean {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return true\n\n // Collect all model provider prefixes available from connected providers\n const availableModelProviders = new Set<string>()\n for (const providerType of providerTypes) {\n const mapped = PROVIDER_TYPE_TO_MODEL_PROVIDERS[providerType]\n if (mapped) {\n for (const mp of mapped) availableModelProviders.add(mp)\n }\n }\n\n // Framework is compatible if any of its allowed providers overlap with available\n return allowed.some((allowedProvider) => availableModelProviders.has(allowedProvider))\n}\n\n/** Filter models to only those compatible with a framework */\nexport function getCompatibleModels<T extends { id: string }>(models: T[], framework: AgentFramework): T[] {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return models\n return models.filter((model) => {\n const provider = model.id.split('.')[0]\n return allowed.includes(provider)\n })\n}\n\n/** Get the first compatible framework for a given model, or 'custom' as fallback */\nexport function getDefaultFrameworkForModel(modelId: string): AgentFramework {\n const provider = modelId.split('.')[0]\n if (provider === 'anthropic') return 'anthropic'\n if (provider === 'google') return 'google-adk'\n return 'langchain'\n}\n","import type { ReactNode } from 'react'\nimport { getNodeStateClass } from '../../constants'\n\ninterface NodeCardProps {\n /** React Flow selection state */\n selected?: boolean\n /** Node type key for border colors (e.g. 'agent', 'tool', 'if_else') */\n nodeType: string\n /** Width class — defaults to 'w-[260px]' */\n width?: string\n /** Custom border class override (e.g. group node with dynamic colors) */\n customBorder?: string\n /** Display variant — 'error' shows dashed amber border for missing entities */\n variant?: 'default' | 'error'\n /** Compact density mode for short-card view */\n compact?: boolean\n /** Additional CSS classes */\n className?: string\n /** Inline styles */\n style?: React.CSSProperties\n /** Interactive attributes for div-based clickable nodes */\n role?: string\n tabIndex?: number\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void\n onDoubleClick?: (event: React.MouseEvent<HTMLDivElement>) => void\n children: ReactNode\n}\n\n/**\n * Base card container for all standard flow nodes.\n *\n * Provides shared styling: rounded corners, border, glassmorphism surface,\n * padding, selection/hover state ring, and group context for child hover effects.\n *\n * Nodes that do NOT use this: NoteFlowNode (custom bg/border), GroupFlowNode expanded (resizable container).\n */\nexport function NodeCard({\n selected,\n nodeType,\n width = 'w-[260px]',\n customBorder,\n variant = 'default',\n compact = false,\n className,\n style,\n role,\n tabIndex,\n onClick,\n onKeyDown,\n onDoubleClick,\n children,\n}: NodeCardProps) {\n if (variant === 'error') {\n return (\n <div\n className={`${width} rounded-xl border border-dashed border-amber-400/60 bg-amber-50/50 ${compact ? 'min-h-[84px] p-3' : 'p-4'} dark:border-amber-500/40 dark:bg-amber-900/10${className ? ` ${className}` : ''}`}\n style={style}\n >\n {children}\n </div>\n )\n }\n\n return (\n <div\n data-workflow-node-type={nodeType}\n className={`group relative ${width} rounded-xl border liquid-surface ${compact ? 'min-h-[84px] p-3' : 'p-4'} transition-all ${getNodeStateClass(selected, nodeType, customBorder)}${className ? ` ${className}` : ''}`}\n style={style}\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n onDoubleClick={onDoubleClick}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport { GraphNodeBadge, GraphNodeHeader, GraphNodeIconBubble, GraphNodeMeta } from './graph-node-primitives'\nimport { LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_BADGE_SOFT_COLORS, LOGIC_NODE_GRADIENTS } from '../../constants/workflow-constants'\nimport { NodeCard } from './node-card'\n\ntype WorkflowTone = keyof typeof LOGIC_NODE_GRADIENTS\n\ninterface NodeInteractiveCardProps {\n nodeId: string\n onEdit?: (id: string) => void\n selected?: boolean\n nodeType: string\n width?: string\n compact?: boolean\n className?: string\n children: ReactNode\n}\n\nexport function NodeInteractiveCard({\n nodeId,\n onEdit,\n selected,\n nodeType,\n width,\n compact = false,\n className = 'cursor-pointer text-left',\n children,\n}: NodeInteractiveCardProps) {\n return (\n <NodeCard\n compact={compact}\n selected={selected}\n nodeType={nodeType}\n width={width}\n role=\"button\"\n tabIndex={0}\n onClick={() => onEdit?.(nodeId)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') onEdit?.(nodeId)\n }}\n className={className}\n >\n {children}\n </NodeCard>\n )\n}\n\ninterface NodeIconBubbleProps {\n tone: WorkflowTone\n children: ReactNode\n}\n\nexport function NodeIconBubble({ tone, children }: NodeIconBubbleProps) {\n return (\n <GraphNodeIconBubble className={`bg-gradient-to-br ${LOGIC_NODE_GRADIENTS[tone]}`}>\n {children}\n </GraphNodeIconBubble>\n )\n}\n\ninterface NodeCardHeaderProps {\n icon: ReactNode\n title: string\n description?: string\n compact?: boolean\n iconClassName: string\n}\n\nexport function NodeCardHeader({ icon, title, description, compact = false, iconClassName }: NodeCardHeaderProps) {\n return <GraphNodeHeader icon={icon} title={title} description={description} compact={compact} iconClassName={iconClassName} />\n}\n\ninterface NodeCardMetaProps {\n compact?: boolean\n children: ReactNode\n}\n\nexport function NodeCardMeta({ compact = false, children }: NodeCardMetaProps) {\n return <GraphNodeMeta compact={compact}>{children}</GraphNodeMeta>\n}\n\ninterface NodeCardBadgeProps {\n children: ReactNode\n className?: string\n tone?: WorkflowTone\n soft?: boolean\n}\n\nexport function NodeCardBadge({ children, className, tone, soft = false }: NodeCardBadgeProps) {\n // Tone-driven callers still rely on the legacy LOGIC_NODE_BADGE_*_COLORS\n // className contract (rendered through GraphNodeBadge). Plain-className\n // callers also flow through GraphNodeBadge unchanged. Only the bare\n // fallback (no tone, no className) lands on the canonical <Badge>.\n if (tone) {\n const toneClass = soft ? LOGIC_NODE_BADGE_SOFT_COLORS[tone] : LOGIC_NODE_BADGE_COLORS[tone]\n return <GraphNodeBadge className={`inline-flex items-center rounded-full px-2 py-0.5 text-[10px] ${soft ? 'font-medium' : 'font-semibold'} ${toneClass}`}>{children}</GraphNodeBadge>\n }\n\n if (className) {\n return <GraphNodeBadge className={className}>{children}</GraphNodeBadge>\n }\n\n return <Badge color=\"zinc\" size=\"xs\">{children}</Badge>\n}\n\ninterface NodeCardDeleteActionProps {\n nodeId: string\n onDelete: ((id: string) => void) | undefined\n}\n\nexport function NodeCardDeleteAction({ nodeId, onDelete }: NodeCardDeleteActionProps) {\n if (!onDelete) return null\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n onDelete(nodeId)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation()\n onDelete(nodeId)\n }\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label=\"Delete\"\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )\n}\n\ninterface NodeCardBranchLabelProps {\n children: ReactNode\n className: string\n}\n\nexport function NodeCardBranchLabel({ children, className }: NodeCardBranchLabelProps) {\n return <span className={className}>{children}</span>\n}\n","import { Handle, Position } from '@xyflow/react'\nimport type { CSSProperties } from 'react'\nimport { useWorkflowStore } from '../../store/workflow-store'\n\nconst BASE_HANDLE_CLASS = '!h-3 !w-3 !border-2 !border-white dark:!border-gray-800'\n\n/**\n * Resolve handle position based on the current layout direction.\n * In LR mode: Left = input, Right = output (default)\n * In TB mode: Top = input, Bottom = output\n * In free mode: use the original position as-is\n */\nfunction useResolvedPosition(position: Position): Position {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n if (layoutDirection !== 'TB') return position\n\n // Map LR positions to TB positions\n if (position === Position.Left) return Position.Top\n if (position === Position.Right) return Position.Bottom\n return position\n}\n\ninterface WorkflowHandleProps {\n type: 'source' | 'target'\n position: Position\n id: string\n colorClass: string\n className?: string\n style?: CSSProperties\n}\n\nexport function WorkflowHandle({ type, position, id, colorClass, className, style }: WorkflowHandleProps) {\n const resolvedPosition = useResolvedPosition(position)\n return (\n <Handle\n type={type}\n position={resolvedPosition}\n id={id}\n style={style}\n className={`${BASE_HANDLE_CLASS} ${colorClass}${className ? ` ${className}` : ''}`}\n />\n )\n}\n\ninterface WorkflowDynamicTargetHandlesProps {\n count: number\n idPrefix: string\n colorClass: string\n}\n\nexport function WorkflowDynamicTargetHandles({ count, idPrefix, colorClass }: WorkflowDynamicTargetHandlesProps) {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const isTB = layoutDirection === 'TB'\n const handlePosition = isTB ? Position.Top : Position.Left\n\n return (\n <>\n {Array.from({ length: count }, (_, index) => (\n <WorkflowHandle\n key={`${idPrefix}-${index}`}\n type=\"target\"\n position={handlePosition}\n id={`${idPrefix}-${index}`}\n colorClass={colorClass}\n style={isTB\n ? { left: `${((index + 1) / (count + 1)) * 100}%` }\n : { top: `${((index + 1) / (count + 1)) * 100}%` }\n }\n />\n ))}\n </>\n )\n}\n\ninterface WorkflowDynamicHandlesProps {\n count: number\n idPrefix: string\n colorClass: string\n type: 'source' | 'target'\n position: Position\n keyIds?: string[]\n}\n\nexport function WorkflowDynamicHandles({\n count,\n idPrefix,\n colorClass,\n type,\n position,\n keyIds,\n}: WorkflowDynamicHandlesProps) {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const isTB = layoutDirection === 'TB'\n const resolvedPosition = isTB\n ? (position === Position.Left ? Position.Top : position === Position.Right ? Position.Bottom : position)\n : position\n\n return (\n <>\n {Array.from({ length: count }, (_, index) => (\n <WorkflowHandle\n key={keyIds?.[index] ?? `${idPrefix}-${index}`}\n type={type}\n position={resolvedPosition}\n id={`${idPrefix}-${index}`}\n colorClass={colorClass}\n style={isTB\n ? { left: `${((index + 1) / (count + 1)) * 100}%` }\n : { top: `${((index + 1) / (count + 1)) * 100}%` }\n }\n />\n ))}\n </>\n )\n}\n","/**\n * Node Running Indicator\n * ======================\n * Dify-style running status overlay for workflow nodes.\n * Shows a spinner (running), checkmark (success), or X (error)\n * badge in the top-right corner of the node. Reads status from\n * the Zustand workflow store's nodeResults map.\n */\n\nimport { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport { getNodeExecutionAccent, getNodeExecutionAccentRgb } from '../../constants'\nimport { useWorkflowStore } from '../../store/workflow-store'\n\ntype NodeRunningIndicatorProps = {\n nodeId: string\n}\n\nfunction NodeRunningIndicatorComponent({ nodeId }: NodeRunningIndicatorProps) {\n const nodeResult = useWorkflowStore((state) => state.nodeResults[nodeId])\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [nodeType, setNodeType] = useState<string>('agent')\n const accentColor = useMemo(() => getNodeExecutionAccent(nodeType), [nodeType])\n const accentRgb = useMemo(() => getNodeExecutionAccentRgb(nodeType), [nodeType])\n\n useEffect(() => {\n const indicatorElement = containerRef.current\n\n if (!indicatorElement) return\n\n const nodeWrapper = indicatorElement.closest('.react-flow__node')\n\n if (!nodeWrapper) return\n\n const wrapperClass = Array.from(nodeWrapper.classList).find(\n (className) => className.startsWith('react-flow__node-') && className !== 'react-flow__node',\n )\n\n if (!wrapperClass) return\n\n setNodeType(wrapperClass.replace('react-flow__node-', ''))\n }, [])\n\n if (!nodeResult) return null\n\n const { status, durationMs } = nodeResult\n\n return (\n <div ref={containerRef} className=\"absolute -right-1 -top-1 z-10 flex items-center gap-1\">\n {status === 'pending' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-gray-300 bg-white shadow-sm dark:border-gray-600 dark:bg-gray-800\">\n <span className=\"h-2 w-2 rounded-full bg-gray-400 dark:bg-gray-500\" />\n </span>\n )}\n\n {status === 'running' && (\n <span\n className=\"flex h-5 w-5 items-center justify-center rounded-full border bg-white shadow-sm dark:bg-gray-800\"\n style={{\n borderColor: `rgba(${accentRgb}, 0.55)`,\n boxShadow: `0 0 0 1px rgba(${accentRgb}, 0.16), 0 6px 16px rgba(${accentRgb}, 0.18)`,\n }}\n >\n <svg className=\"h-3 w-3 animate-spin motion-reduce:animate-none\" style={{ color: accentColor }} viewBox=\"0 0 24 24\" fill=\"none\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </span>\n )}\n\n {status === 'success' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-emerald-300 bg-emerald-50 shadow-sm dark:border-emerald-600 dark:bg-emerald-900/30\">\n <svg className=\"h-3 w-3 text-emerald-600 dark:text-emerald-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clipRule=\"evenodd\" />\n </svg>\n </span>\n )}\n\n {status === 'error' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-red-50 shadow-sm dark:border-red-600 dark:bg-red-900/30\">\n <svg className=\"h-3 w-3 text-red-600 dark:text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n </span>\n )}\n\n {/* Duration badge for completed nodes */}\n {(status === 'success' || status === 'error') && durationMs !== undefined && (\n <span\n className={`rounded-full px-1.5 py-0.5 text-[9px] font-medium shadow-sm ${\n status === 'success'\n ? 'bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300'\n : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'\n }`}\n >\n {durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(1)}s`}\n </span>\n )}\n </div>\n )\n}\n\nexport const NodeRunningIndicator = memo(NodeRunningIndicatorComponent)\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { CpuChipIcon, TrashIcon, ExclamationTriangleIcon, CommandLineIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { AgentNodeData } from '../../types'\nimport { getFrameworkMeta } from '../icons/agent-framework-icons'\nimport { getAgentTier } from '../../utils/agent-tier'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AgentFlowNode = memo(function AgentFlowNode({ id, data, selected }: { id: string; data: AgentNodeData; selected?: boolean }) {\n const t = useTranslations('agents')\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing agent (entity not loaded yet or deleted)\n if (!data.agent?.name) {\n const agentLabel = (data as { label?: string }).label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <WorkflowHandle type=\"target\" position={Position.Top} id=\"top-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <NodeCard variant=\"error\" nodeType=\"agent\" width=\"w-[320px]\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-6 w-6 text-white\" />}\n title={agentLabel || 'Agent'}\n description={t('agentNotFound')}\n iconClassName=\"flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"bottom-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n }\n\n const agentId = data.agent.id || data.agent.agentId\n const frameworkMeta = getFrameworkMeta((data.agent as Record<string, unknown>).framework as string | undefined)\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handles — always visible for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <WorkflowHandle type=\"target\" position={Position.Top} id=\"top-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n\n <button type=\"button\" onClick={() => data.onSelect(agentId)} className=\"w-full text-left\">\n <NodeCard compact={isCompact} selected={selected} nodeType=\"agent\" width=\"w-[320px]\">\n <div className=\"flex items-start gap-3\">\n <div className=\"relative flex-shrink-0\">\n {data.agent.avatar ? (\n <img src={data.agent.avatar as string} alt={data.agent.name} className=\"h-11 w-11 rounded-full bg-white shadow-sm ring-1 ring-gray-200/50 dark:bg-gray-800 dark:ring-white/10\" />\n ) : (\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-gradient-to-br from-indigo-500/25 to-purple-500/25 ring-1 ring-indigo-500/30\">\n <CpuChipIcon className=\"h-6 w-6 text-indigo-500 dark:text-indigo-300\" />\n </div>\n )}\n <div className=\"absolute -bottom-0.5 -right-0.5 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500 ring-2 ring-white dark:ring-gray-900\">\n <CpuChipIcon className=\"h-2.5 w-2.5 text-white\" />\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"truncate text-sm font-semibold text-gray-900 dark:text-white\">{data.agent.name}</h3>\n {!isCompact && <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">{data.agent.role}</p>}\n </div>\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge color=\"indigo\" size=\"xs\">Agent</Badge>\n {(() => {\n const tier = getAgentTier(Number((data.agent as Record<string, unknown>).elo ?? 0))\n return (\n <Badge color=\"zinc\" size=\"xs\" className={tier.pillColor}>\n {tier.key}\n </Badge>\n )\n })()}\n <Badge color=\"zinc\" size=\"xs\" className={frameworkMeta.badgeColor} icon={<frameworkMeta.IconComponent className=\"h-3 w-3\" />}>\n {frameworkMeta.label}\n </Badge>\n <Badge color=\"blue\" size=\"xs\">{data.agent.modelId}</Badge>\n <Badge color=\"zinc\" size=\"xs\">T: {data.agent.temperature}</Badge>\n <Badge color=\"zinc\" size=\"xs\">v{data.agent.activePromptVersion}</Badge>\n\n {/* Agent tools — compact inline chips */}\n {data.agentTools && data.agentTools.length > 0 && (\n <>\n <div className=\"w-full\" />\n <div className=\"flex w-full items-center gap-1 border-t border-gray-200/20 pt-1 dark:border-white/5\">\n <CommandLineIcon className=\"h-3 w-3 shrink-0 text-amber-500 dark:text-amber-400\" />\n {data.agentTools.slice(0, 3).map((tool) => (\n <Badge\n key={tool.id}\n color={tool.enabled ? 'amber' : 'zinc'}\n size=\"xs\"\n className={tool.enabled ? '' : 'line-through'}\n >\n {tool.name}\n </Badge>\n ))}\n {data.agentTools.length > 3 && (\n <span className=\"text-[9px] text-gray-400 dark:text-gray-500\">+{data.agentTools.length - 3}</span>\n )}\n </div>\n </>\n )}\n\n {data.onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n data.onRemoveFromCanvas!(id)\n }}\n className=\"nodrag nopan ml-auto cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n {/* Output handles — always visible for interactive canvas */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"bottom-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"rule-out\" style={{ top: '75%' }} colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { CommandLineIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport type { AgentTool } from '../../contracts'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\ntype AgentToolNodeData = {\n agentTool: AgentTool\n order?: number\n displayMode?: 'detailed' | 'compact'\n onEdit?: (agentTool: AgentTool) => void\n onToggle?: (agentTool: AgentTool) => void\n onRemoveFromCanvas?: (nodeId: string) => void\n label?: string\n}\n\nconst CATEGORY_ICONS: Record<string, string> = {\n search: 'from-sky-400 to-blue-500',\n code: 'from-cyan-400 to-sky-500',\n file: 'from-violet-400 to-purple-500',\n web: 'from-orange-400 to-amber-500',\n math: 'from-emerald-400 to-green-500',\n custom: 'from-amber-400 to-orange-500',\n}\n\nconst CATEGORY_PILL: Record<string, string> = {\n search: 'bg-sky-100 text-sky-700 dark:bg-sky-500/20 dark:text-sky-300',\n code: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n file: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n web: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n math: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n custom: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n}\n\nexport const AgentToolFlowNode = memo(function AgentToolFlowNode({ id, data, selected }: { id: string; data: AgentToolNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { agentTool, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n if (!agentTool?.name) {\n const label = data.label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-400\" />\n <NodeCard variant=\"error\" nodeType=\"agent_tool\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || 'Agent Tool'}\n description={t('agentToolNotFound')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-amber-500\" />\n </>\n )\n }\n\n const category = agentTool.category ?? 'custom'\n const gradient = CATEGORY_ICONS[category] ?? CATEGORY_ICONS.custom\n const pill = CATEGORY_PILL[category] ?? CATEGORY_PILL.custom\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-400\" />\n\n <NodeCard compact={isCompact} selected={selected} nodeType=\"agent_tool\" width=\"w-[280px]\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <CommandLineIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{agentTool.name}</h3>\n {!isCompact && agentTool.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">{agentTool.description}</p>\n )}\n </div>\n </div>\n\n {data.onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n }}\n >\n <ToggleSwitch\n checked={Boolean(agentTool.enabled)}\n onChange={() => data.onToggle?.(agentTool)}\n size=\"sm\"\n color=\"blue\"\n label={`${agentTool.name} enabled`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge color=\"amber\" size=\"xs\">{t('agentToolNode')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={pill}>{category}</Badge>\n {agentTool.parameters && agentTool.parameters.length > 0 && (\n <Badge color=\"zinc\" size=\"xs\">{agentTool.parameters.length} params</Badge>\n )}\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan ml-auto cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n </NodeCardMeta>\n </NodeCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-amber-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { WrenchScrewdriverIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport { ICON_MAP, CATEGORY_COLORS, CATEGORY_PILL_COLORS } from '../../constants'\nimport type { ToolCanvasData } from '../../types'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ToolFlowNode = memo(function ToolFlowNode({ id, data, selected }: { id: string; data: ToolCanvasData; selected?: boolean }) {\n const t = useTranslations('admin.tools')\n const { tool, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing tool (entity not loaded yet or deleted)\n if (!tool?.name) {\n const toolLabel = (data as { label?: string }).label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-teal-400\" />\n <NodeCard variant=\"error\" nodeType=\"tool\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={toolLabel || t('nodeType')}\n description={t('toolNotFound')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n {onRemoveFromCanvas && (\n <div className=\"mt-2 flex justify-end\">\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"cursor-pointer rounded-lg p-1 transition hover:bg-red-50 dark:hover:bg-red-900/20\"\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n </div>\n )}\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n }\n\n const { onEdit, onToggle } = data\n const IconComponent = ICON_MAP[tool.icon ?? ''] ?? WrenchScrewdriverIcon\n const categoryKey = (tool.category ?? 'external') as keyof typeof CATEGORY_COLORS\n const gradient = tool.color ?? CATEGORY_COLORS[categoryKey] ?? CATEGORY_COLORS.external\n const categoryPill = CATEGORY_PILL_COLORS[categoryKey] ?? CATEGORY_PILL_COLORS.external\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handle for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(tool)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"tool\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <IconComponent className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{tool.name}</h3>\n {!isCompact && <p className=\"mt-0.5 line-clamp-1 text-xs text-gray-500 dark:text-gray-400\">{String(tool.description ?? '')}</p>}\n </div>\n </div>\n\n {onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked={Boolean(tool.enabled)}\n onChange={() => onToggle(tool)}\n size=\"sm\"\n color=\"blue\"\n label={`${tool.name} enabled`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <Badge color=\"teal\" size=\"xs\">{t('nodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={categoryPill}>{tool.category}</Badge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">{String(tool.timeoutMs ?? '')}ms</span>\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n {/* Output handle — always visible for interactive canvas */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { AdjustmentsHorizontalIcon, ScaleIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport { ADJUSTMENT_GRADIENT, ADJUSTMENT_PILL } from '../../constants'\nimport type { RuleNodeData } from '../../types'\nimport type { RuleNodeConfig, AgentRule } from '../../contracts'\nimport { NodeCard } from './node-card'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const RuleFlowNode = memo(function RuleFlowNode({ id, data, selected }: { id: string; data: RuleNodeData; selected?: boolean }) {\n const t = useTranslations('admin.rules')\n const { rule, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing rule — check for rule engine config mode\n if (!rule?.action) {\n const ruleConfig = (data as { config?: RuleNodeConfig }).config\n const ruleLabel = (data as { label?: string }).label\n\n // Rule engine node — config-based mode (evaluates all applicable rules)\n if (ruleConfig?.type === 'rule') {\n const contextVariableCount = ruleConfig.contextVariables ? Object.keys(ruleConfig.contextVariables).length : 0\n const editHandler = (data as { onEdit?: (nodeId: string) => void }).onEdit\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n\n <button\n type=\"button\"\n onClick={() => editHandler?.(id)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"rule\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-400 to-purple-500 shadow-lg\">\n <ScaleIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">\n {ruleLabel || t('ruleEngine')}\n </h3>\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">{t('ruleEngineDescription')}</p>\n </div>\n </div>\n\n {!isCompact && (\n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Badge color=\"violet\" size=\"xs\">{t('ruleEngine')}</Badge>\n {contextVariableCount > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {contextVariableCount} vars\n </span>\n )}\n {ruleConfig.outputVariable && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n → {ruleConfig.outputVariable}\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n )}\n </NodeCard>\n </button>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n }\n\n // Truly missing rule — amber placeholder\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n <NodeCard variant=\"error\" nodeType=\"rule\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\">\n <ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">\n {ruleLabel || t('nodeType')}\n </h3>\n <p className=\"mt-0.5 text-xs text-amber-600 dark:text-amber-400\">{t('ruleNotFound')}</p>\n </div>\n </div>\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n }\n\n // Specific rule mode — rule entity found\n const onEdit = (data as { onEdit?: (rule: AgentRule) => void }).onEdit\n const onToggle = (data as { onToggle?: (rule: AgentRule) => void }).onToggle\n\n const action = rule.action as Record<string, unknown> | undefined\n const adjustmentType = String(action?.adjustmentType ?? 'percentage')\n const adjustmentValue = Number(action?.adjustmentValue ?? 0)\n const gradient = ADJUSTMENT_GRADIENT[adjustmentType] ?? ADJUSTMENT_GRADIENT.percentage\n const typePill = ADJUSTMENT_PILL[adjustmentType] ?? ADJUSTMENT_PILL.percentage\n\n const adjustmentDisplay = adjustmentType === 'percentage'\n ? `${adjustmentValue > 0 ? '+' : ''}${adjustmentValue}%`\n : adjustmentType === 'fixed'\n ? `${adjustmentValue > 0 ? '+' : ''}${adjustmentValue}`\n : 'formula'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handle — always visible for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(rule)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"rule\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <AdjustmentsHorizontalIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{rule.name}</h3>\n <p className=\"mt-0.5 text-xs font-medium text-gray-600 dark:text-gray-300\">{adjustmentDisplay}</p>\n </div>\n </div>\n\n {onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked={Boolean(rule.enabled)}\n onChange={() => onToggle(rule)}\n size=\"sm\"\n color=\"violet\"\n label={`${rule.name} enabled`}\n />\n </span>\n )}\n </div>\n\n {!isCompact && (\n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Badge color=\"violet\" size=\"xs\">{t('nodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={typePill}>{adjustmentType}</Badge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">P{String(rule.priority ?? '')}</span>\n {Array.isArray(rule.condition?.categories) && rule.condition.categories.length > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {rule.condition.categories.length} categories\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n )}\n </NodeCard>\n </button>\n\n {/* Output handle */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { TrashIcon, ExclamationTriangleIcon, CircleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { EntityNodeData } from '../../types'\nimport { getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon } from '../../constants/entity-colors'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const EntityFlowNode = memo(function EntityFlowNode({ id, data, selected }: { id: string; data: EntityNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onEdit, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing config gracefully\n if (!config || config.type !== 'entity') {\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-blue-400\" />\n <NodeCard variant=\"error\" nodeType=\"entity\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || t('entityNodeType')}\n description={t('entityNotConfigured')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-blue-400\" />\n </>\n )\n }\n\n const entityKey = config.entityMasterId || data.entity?.id\n const fieldCount = config.selectedFields?.length ?? data.entity?.fields.length ?? 0\n const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0\n const EntityIcon = getEntityIcon(entityKey) ?? CircleStackIcon\n const gradient = getEntityGradient(entityKey)\n const badgeColor = getEntityBadgeColor(entityKey)\n const handleColor = getEntityHandleColor(entityKey)\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={handleColor} />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(id)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"entity\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <EntityIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n {!isCompact && (\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">{data.entity?.label ?? config.entityMasterId}</p>\n )}\n </div>\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <Badge color=\"zinc\" size=\"xs\" className={badgeColor}>{t('entityNodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={badgeColor}>{fieldCount} {t('entityFields')}</Badge>\n {config.limit > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {t('entityLimit', { count: config.limit })}\n </span>\n )}\n {filterCount > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {filterCount} {t('entityFilters')}\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={handleColor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { PlayIcon } from '@heroicons/react/24/outline'\nimport type { StartNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const StartFlowNode = memo(function StartFlowNode({ id, data, selected }: { id: string; data: StartNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.inputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"start\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"start\">\n <PlayIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('startNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"start\">\n {t('startNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"start\" soft>\n {t('inputVariables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-green-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { StopIcon } from '@heroicons/react/24/outline'\nimport type { EndNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const EndFlowNode = memo(function EndFlowNode({ id, data, selected }: { id: string; data: EndNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.outputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-red-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"end\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"end\">\n <StopIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('endNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"end\">\n {t('endNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"end\" soft>\n {t('outputVariables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowsPointingOutIcon } from '@heroicons/react/24/outline'\nimport { StatusBadge } from '@ui/components/status-badge'\nimport type { IfElseNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IfElseFlowNode = memo(function IfElseFlowNode({ id, data, selected }: { id: string; data: IfElseNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const conditionCount = config?.conditions?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"if_else\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"if_else\">\n <ArrowsPointingOutIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('ifElseNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"if_else\">\n {t('ifElseNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"if_else\" soft>\n {t('conditions')}: {conditionCount}\n </NodeCardBadge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {(config.logicalOperator ?? 'and').toUpperCase()}\n </span>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n\n <div className=\"pointer-events-none absolute -right-12 top-1/2 -translate-y-1/2\">\n <StatusBadge status=\"success\" label={t('ifBranchLabel')} size=\"sm\" />\n </div>\n <div className=\"pointer-events-none absolute bottom-[-1.9rem] left-1/2 -translate-x-1/2\">\n <StatusBadge status=\"error\" label={t('elseBranchLabel')} size=\"sm\" />\n </div>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"true-out\" colorClass=\"!bg-green-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"false-out\" colorClass=\"!bg-red-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { CodeBracketIcon } from '@heroicons/react/24/outline'\nimport type { CodeNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const CodeFlowNode = memo(function CodeFlowNode({ id, data, selected }: { id: string; data: CodeNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n // `code` node can be authored in two shapes: `{language, code}` script\n // (no runtime today) or `{operation, ...}` engine mini-language. Pick\n // the badge + preview from whichever shape this node uses.\n const isScripted = 'language' in config\n const badgeLabel = isScripted ? config.language : config.operation\n const codePreview = isScripted && config.code ? config.code.slice(0, 30) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"code\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"code\">\n <CodeBracketIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('codeNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"code\">\n {t('codeNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"code\" soft>\n {badgeLabel}\n </NodeCardBadge>\n {codePreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {codePreview}...\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { GlobeAltIcon } from '@heroicons/react/24/outline'\nimport type { HttpRequestNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const HttpRequestFlowNode = memo(function HttpRequestFlowNode({ id, data, selected }: { id: string; data: HttpRequestNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const urlPreview = config.url ? config.url.slice(0, 30) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-orange-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"http_request\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"http_request\">\n <GlobeAltIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('httpRequestNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"http_request\">\n {t('httpRequestNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"http_request\" soft>\n {config.method}\n </NodeCardBadge>\n {urlPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {urlPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-orange-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { DocumentTextIcon } from '@heroicons/react/24/outline'\nimport type { TemplateTransformNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const TemplateTransformFlowNode = memo(function TemplateTransformFlowNode({ id, data, selected }: { id: string; data: TemplateTransformNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-pink-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"template_transform\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"template_transform\">\n <DocumentTextIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('templateTransformNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"template_transform\">\n {t('templateTransformNode')}\n </NodeCardBadge>\n {config.outputVariable && (\n <NodeCardBadge tone=\"template_transform\" soft>\n {config.outputVariable}\n </NodeCardBadge>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-pink-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowPathIcon } from '@heroicons/react/24/outline'\nimport type { IterationNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IterationFlowNode = memo(function IterationFlowNode({ id, data, selected }: { id: string; data: IterationNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-indigo-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"iteration\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"iteration\">\n <ArrowPathIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('iterationNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"iteration\">\n {t('iterationNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"iteration\" soft>\n {t('maxIterations')}: {config?.maxIterations ?? 10}\n </NodeCardBadge>\n {config?.iteratorVariable && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {config.iteratorVariable}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-indigo-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"loop-out\" colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { BookOpenIcon } from '@heroicons/react/24/outline'\nimport type { KnowledgeBaseNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const KnowledgeBaseFlowNode = memo(function KnowledgeBaseFlowNode({ id, data, selected }: { id: string; data: KnowledgeBaseNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-emerald-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"knowledge_base\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"knowledge_base\">\n <BookOpenIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('knowledgeBaseNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"knowledge_base\">\n {t('knowledgeBaseNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"knowledge_base\" soft>\n {t('topK')}: {config.topK}\n </NodeCardBadge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {t('similarity')}: {config.similarityThreshold}\n </span>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-emerald-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ChatBubbleLeftRightIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { AnswerNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AnswerFlowNode = memo(function AnswerFlowNode({ id, data, selected }: { id: string; data: AnswerNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.outputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.answer} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"answer\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"answer\">\n <ChatBubbleLeftRightIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('answerNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"answer\">\n {t('answerNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"answer\" soft>\n {t('variables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { QuestionMarkCircleIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { QuestionClassifierNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const QuestionClassifierFlowNode = memo(function QuestionClassifierFlowNode({ id, data, selected }: { id: string; data: QuestionClassifierNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const categoryCount = config?.categories?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.question_classifier} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"question_classifier\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"question_classifier\">\n <QuestionMarkCircleIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('questionClassifierNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"question_classifier\">\n {t('questionClassifierNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"question_classifier\" soft>\n {t('categories')}: {categoryCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n {/* Dynamic output handles — one per category */}\n <WorkflowDynamicHandles\n count={categoryCount}\n idPrefix=\"category\"\n type=\"source\"\n position={Position.Right}\n colorClass={LOGIC_NODE_HANDLE_COLORS.question_classifier}\n keyIds={(config?.categories ?? []).map((category) => category.id)}\n />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { AdjustmentsVerticalIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { ParameterExtractorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ParameterExtractorFlowNode = memo(function ParameterExtractorFlowNode({ id, data, selected }: { id: string; data: ParameterExtractorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const parameterCount = config?.parameters?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.parameter_extractor} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"parameter_extractor\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"parameter_extractor\">\n <AdjustmentsVerticalIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('parameterExtractorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"parameter_extractor\">\n {t('parameterExtractorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"parameter_extractor\" soft>\n {t('parameters')}: {parameterCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.parameter_extractor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowsRightLeftIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { VariableAssignerNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicTargetHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const VariableAssignerFlowNode = memo(function VariableAssignerFlowNode({ id, data, selected }: { id: string; data: VariableAssignerNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const assignmentCount = config?.assignments?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Dynamic input handles — one per assignment */}\n <WorkflowDynamicTargetHandles count={assignmentCount} idPrefix=\"assignment\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_assigner} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"variable_assigner\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"variable_assigner\">\n <ArrowsRightLeftIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('variableAssignerNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"variable_assigner\">\n {t('variableAssignerNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"variable_assigner\" soft>\n {t('assignments')}: {assignmentCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_assigner} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { Square3Stack3DIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { VariableAggregatorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicTargetHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const VariableAggregatorFlowNode = memo(function VariableAggregatorFlowNode({ id, data, selected }: { id: string; data: VariableAggregatorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const inputCount = config?.inputVariables?.length ?? 1\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Dynamic input handles — one per input variable */}\n <WorkflowDynamicTargetHandles count={inputCount} idPrefix=\"input\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_aggregator} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"variable_aggregator\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"variable_aggregator\">\n <Square3Stack3DIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('variableAggregatorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"variable_aggregator\">\n {t('variableAggregatorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"variable_aggregator\" soft>\n {t('inputs')}: {inputCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_aggregator} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { DocumentMagnifyingGlassIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { DocumentExtractorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DocumentExtractorFlowNode = memo(function DocumentExtractorFlowNode({ id, data, selected }: { id: string; data: DocumentExtractorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const extractionMode = config.extractionMode\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.document_extractor} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"document_extractor\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"document_extractor\">\n <DocumentMagnifyingGlassIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('documentExtractorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"document_extractor\">\n {t('documentExtractorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"document_extractor\" soft>\n {extractionMode}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.document_extractor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ListBulletIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { ListOperatorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ListOperatorFlowNode = memo(function ListOperatorFlowNode({ id, data, selected }: { id: string; data: ListOperatorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const operationName = config.operation\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.list_operator} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"list_operator\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"list_operator\">\n <ListBulletIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('listOperatorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"list_operator\">\n {t('listOperatorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"list_operator\" soft>\n {operationName}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.list_operator} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { PlayCircleIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { IterationStartNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IterationStartFlowNode = memo(function IterationStartFlowNode({ id, data, selected }: { id: string; data: IterationStartNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const iteratorVariable = config.iteratorVariable\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.iteration_start} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"iteration_start\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"iteration_start\">\n <PlayCircleIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('iterationStartNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"iteration_start\">\n {t('iterationStartNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"iteration_start\" soft>\n {iteratorVariable || t('noVariable')}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.iteration_start} />\n </>\n )\n})\n","import { memo, useState, useCallback, useRef } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { PencilSquareIcon } from '@heroicons/react/24/outline'\nimport type { NoteNodeData } from '../../types'\nimport { getNodeStateClass } from '../../constants'\n\nconst NOTE_BACKGROUND_COLORS: Record<string, { light: string; dark: string }> = {\n yellow: { light: 'bg-yellow-50', dark: 'dark:bg-yellow-900/30' },\n blue: { light: 'bg-blue-50', dark: 'dark:bg-blue-900/30' },\n green: { light: 'bg-green-50', dark: 'dark:bg-green-900/30' },\n pink: { light: 'bg-pink-50', dark: 'dark:bg-pink-900/30' },\n purple: { light: 'bg-purple-50', dark: 'dark:bg-purple-900/30' },\n}\n\nconst NOTE_BORDER_COLORS: Record<string, string> = {\n yellow: 'border-yellow-300/60 dark:border-yellow-600/40',\n blue: 'border-blue-300/60 dark:border-blue-600/40',\n green: 'border-green-300/60 dark:border-green-600/40',\n pink: 'border-pink-300/60 dark:border-pink-600/40',\n purple: 'border-purple-300/60 dark:border-purple-600/40',\n}\n\nconst NOTE_ICON_COLORS: Record<string, string> = {\n yellow: 'text-yellow-600 dark:text-yellow-400',\n blue: 'text-blue-600 dark:text-blue-400',\n green: 'text-green-600 dark:text-green-400',\n pink: 'text-pink-600 dark:text-pink-400',\n purple: 'text-purple-600 dark:text-purple-400',\n}\n\nexport const NoteFlowNode = memo(function NoteFlowNode({ data, selected }: { id: string; data: NoteNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config } = data\n const [isEditing, setIsEditing] = useState(false)\n const [noteText, setNoteText] = useState(config.text)\n const textareaReference = useRef<HTMLTextAreaElement>(null)\n\n const noteColor = config.color || 'yellow'\n const noteWidth = config.width || 200\n const noteHeight = config.height || 150\n\n const backgroundColors = NOTE_BACKGROUND_COLORS[noteColor] || NOTE_BACKGROUND_COLORS.yellow\n const borderColor = NOTE_BORDER_COLORS[noteColor] || NOTE_BORDER_COLORS.yellow\n const iconColor = NOTE_ICON_COLORS[noteColor] || NOTE_ICON_COLORS.yellow\n\n const handleDoubleClick = useCallback(() => {\n setIsEditing(true)\n requestAnimationFrame(() => {\n textareaReference.current?.focus()\n })\n }, [])\n\n const handleBlur = useCallback(() => {\n setIsEditing(false)\n }, [])\n\n const handleTextChange = useCallback((event: React.ChangeEvent<HTMLTextAreaElement>) => {\n setNoteText(event.target.value)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Escape') {\n setIsEditing(false)\n textareaReference.current?.blur()\n }\n }, [])\n\n return (\n <div\n className={`${getNodeStateClass(selected, 'note')} ${isEditing ? 'nodrag nopan' : ''} relative rounded-xl border ${borderColor} ${backgroundColors.light} ${backgroundColors.dark} p-3 shadow-sm transition-all`}\n style={{ width: noteWidth, minHeight: noteHeight }}\n onDoubleClick={handleDoubleClick}\n >\n {/* Note icon header */}\n <div className=\"mb-2 flex items-center gap-1.5\">\n <PencilSquareIcon className={`h-3.5 w-3.5 ${iconColor}`} />\n <span className={`text-[10px] font-medium ${iconColor}`}>{t('noteNode')}</span>\n </div>\n\n {/* Editable text area */}\n {isEditing ? (\n <textarea\n ref={textareaReference}\n value={noteText}\n onChange={handleTextChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className=\"w-full resize-none border-none bg-transparent text-xs text-gray-700 outline-none placeholder:text-gray-400 dark:text-gray-200 dark:placeholder:text-gray-500\"\n style={{ minHeight: noteHeight - 40 }}\n placeholder={t('noteNodeDescription')}\n />\n ) : (\n <p\n className=\"cursor-text whitespace-pre-wrap text-xs text-gray-700 dark:text-gray-200\"\n style={{ minHeight: noteHeight - 40 }}\n >\n {noteText || (\n <span className=\"italic text-gray-400 dark:text-gray-500\">{t('noteNodeDescription')}</span>\n )}\n </p>\n )}\n </div>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { TrashIcon, ExclamationTriangleIcon, ServerStackIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport type { DatasourceNodeData } from '../../types'\n\nconst DATASOURCE_LOGOS: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n mysql: '/logos/datasources/mysql.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDatasourceLogo(datasourceId: string, dialect?: string): string | null {\n const search = (dialect ?? datasourceId).toLowerCase()\n for (const [key, url] of Object.entries(DATASOURCE_LOGOS)) {\n if (search.includes(key)) return url\n }\n return null\n}\nimport { Badge } from '@ui/components/badge'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DatasourceFlowNode = memo(function DatasourceFlowNode({ id, data, selected }: { id: string; data: DatasourceNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, datasource, readOnly = false, onEdit, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing config gracefully\n if (!config || config.type !== 'datasource') {\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-400\" />\n <NodeCard variant=\"error\" nodeType=\"datasource\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || t('datasourceNodeType')}\n description={t('datasourceNotConfigured')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-400\" />\n </>\n )\n }\n\n const columnCount = config.selectedColumns?.length ?? 0\n const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0\n const logo = getDatasourceLogo(config.datasourceId, config.dialect)\n\n const content = (\n <NodeCard compact={isCompact} selected={selected} nodeType=\"datasource\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n {logo ? (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl\">\n <img src={logo} alt={config.dialect ?? ''} className=\"h-8 w-8\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-cyan-500 to-blue-600 shadow-lg\">\n <ServerStackIcon className=\"h-5 w-5 text-white\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n {!isCompact && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-gray-500 dark:text-gray-400\">\n {(datasource?.name ?? config.datasourceId)} · {config.table}\n </p>\n )}\n </div>\n </div>\n\n {!readOnly && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked\n onChange={() => {}}\n disabled\n size=\"sm\"\n color=\"teal\"\n label={`${label} connected`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-1.5\">\n {config.dialect && (\n <Badge color=\"cyan\" size=\"xs\">{config.dialect}</Badge>\n )}\n {readOnly && (\n <Badge color=\"zinc\" size=\"xs\">sample</Badge>\n )}\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {[\n columnCount > 0 ? `${columnCount} cols` : null,\n filterCount > 0 ? `${filterCount} filters` : null,\n config.limit > 0 ? `≤${config.limit}` : null,\n ].filter(Boolean).join(' · ')}\n </span>\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n )\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-400\" />\n\n {!onEdit ? (\n <div className=\"w-full\">{content}</div>\n ) : (\n <button\n type=\"button\"\n onClick={() => onEdit(id)}\n className=\"w-full text-left\"\n >\n {content}\n </button>\n )}\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-400\" />\n </>\n )\n})\n","import { memo, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position, NodeResizer } from '@xyflow/react'\nimport {\n RectangleGroupIcon,\n ChevronUpIcon,\n ChevronDownIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { GroupNodeData } from '../../types'\nimport { getNodeStateClass } from '../../constants'\nimport { NodeCard } from './node-card'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\ntype GroupColorScheme = {\n border: string\n header: string\n bg: string\n text: string\n resizerLine: string\n headerBg: string\n headerBorder: string\n iconText: string\n}\n\nconst GROUP_COLORS: Record<string, GroupColorScheme> = {\n indigo: {\n border: 'border-indigo-300/50 dark:border-indigo-600/50',\n header: 'from-indigo-400 to-indigo-500',\n bg: 'bg-indigo-50/30 dark:bg-indigo-950/20',\n text: 'text-indigo-700 dark:text-indigo-300',\n resizerLine: '#818cf8',\n headerBg: 'bg-indigo-500/15 dark:bg-indigo-400/15',\n headerBorder: 'border-b border-indigo-200/40 dark:border-indigo-500/20',\n iconText: 'text-indigo-600 dark:text-indigo-400',\n },\n teal: {\n border: 'border-teal-300/50 dark:border-teal-600/50',\n header: 'from-teal-400 to-teal-500',\n bg: 'bg-teal-50/30 dark:bg-teal-950/20',\n text: 'text-teal-700 dark:text-teal-300',\n resizerLine: '#2dd4bf',\n headerBg: 'bg-teal-500/15 dark:bg-teal-400/15',\n headerBorder: 'border-b border-teal-200/40 dark:border-teal-500/20',\n iconText: 'text-teal-600 dark:text-teal-400',\n },\n amber: {\n border: 'border-amber-300/50 dark:border-amber-600/50',\n header: 'from-amber-400 to-amber-500',\n bg: 'bg-amber-50/30 dark:bg-amber-950/20',\n text: 'text-amber-700 dark:text-amber-300',\n resizerLine: '#fbbf24',\n headerBg: 'bg-amber-500/15 dark:bg-amber-400/15',\n headerBorder: 'border-b border-amber-200/40 dark:border-amber-500/20',\n iconText: 'text-amber-600 dark:text-amber-400',\n },\n rose: {\n border: 'border-rose-300/50 dark:border-rose-600/50',\n header: 'from-rose-400 to-rose-500',\n bg: 'bg-rose-50/30 dark:bg-rose-950/20',\n text: 'text-rose-700 dark:text-rose-300',\n resizerLine: '#fb7185',\n headerBg: 'bg-rose-500/15 dark:bg-rose-400/15',\n headerBorder: 'border-b border-rose-200/40 dark:border-rose-500/20',\n iconText: 'text-rose-600 dark:text-rose-400',\n },\n slate: {\n border: 'border-slate-300/50 dark:border-slate-600/50',\n header: 'from-slate-400 to-gray-500',\n bg: 'bg-slate-50/30 dark:bg-slate-950/20',\n text: 'text-slate-700 dark:text-slate-300',\n resizerLine: '#94a3b8',\n headerBg: 'bg-slate-500/15 dark:bg-slate-400/15',\n headerBorder: 'border-b border-slate-200/40 dark:border-slate-500/20',\n iconText: 'text-slate-600 dark:text-slate-400',\n },\n}\n\nexport const GroupFlowNode = memo(function GroupFlowNode({ id, data, selected }: { id: string; data: GroupNodeData; selected?: boolean }) {\n const translations = useTranslations('agents.workflow')\n const { config, label, onEdit, onToggleExpand, onRemoveFromCanvas } = data\n const colorScheme = GROUP_COLORS[config.color] ?? GROUP_COLORS.slate\n\n const handleToggleExpand = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onToggleExpand?.(id)\n },\n [id, onToggleExpand]\n )\n\n const handleRemove = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onRemoveFromCanvas?.(id)\n },\n [id, onRemoveFromCanvas]\n )\n\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onEdit?.(id)\n },\n [id, onEdit]\n )\n\n if (!config.isExpanded) {\n // Collapsed: compact single-node representation\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-slate-500\" />\n\n <NodeCard selected={selected} nodeType=\"group\" customBorder={colorScheme.border} className=\"cursor-pointer text-left\" onDoubleClick={handleDoubleClick}>\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${colorScheme.header} shadow-lg`}>\n <RectangleGroupIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {config.description || translations('groupNodeDescription')}\n </p>\n </div>\n </div>\n\n <div className=\"mt-2 flex items-center justify-between\">\n <Badge color=\"zinc\" size=\"xs\" className={colorScheme.text}>\n {translations('groupNode')}\n </Badge>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={handleToggleExpand}\n className=\"nodrag nopan rounded-lg p-1 opacity-0 transition hover:bg-gray-100 group-hover:opacity-100 dark:hover:bg-white/10\"\n title={translations('expandGroup')}\n >\n <ChevronDownIcon className=\"h-3.5 w-3.5 text-gray-500 dark:text-gray-400\" />\n </button>\n {onRemoveFromCanvas && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"nodrag nopan rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n title={translations('deleteGroup')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </button>\n )}\n </div>\n </div>\n </NodeCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-slate-500\" />\n </>\n )\n }\n\n // Expanded: full resizable container\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <NodeResizer\n minWidth={280}\n minHeight={200}\n isVisible={selected}\n lineStyle={{ borderColor: 'transparent' }}\n handleStyle={{ width: 8, height: 8, borderRadius: 4, backgroundColor: colorScheme.resizerLine, border: `2px solid rgba(255,255,255,0.5)` }}\n />\n\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-slate-500\" />\n\n <div\n className={`group relative h-full w-full overflow-hidden rounded-xl border liquid-surface ${getNodeStateClass(selected, undefined, colorScheme.border)} transition-all`}\n style={{ minWidth: config.width, minHeight: config.height }}\n >\n {/* Frosted glass header bar */}\n <div\n className={`nodrag nopan flex cursor-default items-center gap-2 rounded-t-xl backdrop-blur-xl ${colorScheme.headerBg} ${colorScheme.headerBorder} px-3 py-2`}\n onDoubleClick={handleDoubleClick}\n >\n <RectangleGroupIcon className={`h-4 w-4 ${colorScheme.iconText}`} />\n <div className=\"min-w-0 flex-1\">\n <span className={`block truncate text-xs font-semibold ${colorScheme.text}`}>{label}</span>\n {config.description && (\n <span className=\"block truncate text-[10px] text-gray-500 dark:text-gray-400\">{config.description}</span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={handleToggleExpand}\n className=\"nopan rounded-md p-0.5 transition hover:bg-black/5 dark:hover:bg-white/10\"\n title={translations('collapseGroup')}\n >\n <ChevronUpIcon className={`h-3.5 w-3.5 ${colorScheme.iconText}`} />\n </button>\n {onRemoveFromCanvas && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"nopan rounded-md p-0.5 transition hover:bg-red-500/10 dark:hover:bg-red-400/10\"\n title={translations('deleteGroup')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </button>\n )}\n </div>\n\n {/* Child area — React Flow renders children with parentId automatically */}\n <div className=\"relative h-[calc(100%-36px)] w-full\" />\n </div>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-slate-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { MicrophoneIcon } from '@heroicons/react/24/outline'\nimport type { AudioInputNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AudioInputFlowNode = memo(function AudioInputFlowNode({ id, data, selected }: { id: string; data: AudioInputNodeData; selected?: boolean }) {\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const urlPreview = config.url ? config.url.slice(0, 32) : ''\n const formatLabel = config.format && config.format.length > 0 ? config.format : 'auto'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-teal-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"audio_input\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"audio_input\">\n <MicrophoneIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description=\"Validates an audio source URL for downstream voice nodes\"\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"audio_input\">\n Audio Input\n </NodeCardBadge>\n <NodeCardBadge tone=\"audio_input\" soft>\n {formatLabel}\n </NodeCardBadge>\n {urlPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {urlPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { SpeakerWaveIcon } from '@heroicons/react/24/outline'\nimport type { SpeechTranscriberNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const SpeechTranscriberFlowNode = memo(function SpeechTranscriberFlowNode({ id, data, selected }: { id: string; data: SpeechTranscriberNodeData; selected?: boolean }) {\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const model = config.model && config.model.length > 0 ? config.model : 'whisper-1'\n const language = config.language && config.language.length > 0 ? config.language : 'auto'\n const audioRefPreview = config.audioUrl ? config.audioUrl.slice(0, 32) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"speech_transcriber\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"speech_transcriber\">\n <SpeakerWaveIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description=\"Transcribes audio via OpenAI Whisper-compatible endpoints\"\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"speech_transcriber\">\n Whisper\n </NodeCardBadge>\n <NodeCardBadge tone=\"speech_transcriber\" soft>\n {model}\n </NodeCardBadge>\n <NodeCardBadge tone=\"speech_transcriber\" soft>\n {language}\n </NodeCardBadge>\n {audioRefPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {audioRefPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ChartBarIcon } from '@heroicons/react/24/outline'\nimport type { DashboardOutputNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DashboardOutputFlowNode = memo(function DashboardOutputFlowNode({ id, data, selected }: { id: string; data: DashboardOutputNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const source = config?.dashboardFrom\n ? `← ${config.dashboardFrom}`\n : config?.dashboard\n ? 'inline'\n : 'unset'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-fuchsia-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"dashboard_output\"\n width=\"w-[260px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"dashboard_output\">\n <ChartBarIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('dashboardOutputNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"dashboard_output\">\n {t('dashboardOutputNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"dashboard_output\" soft>\n {source}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { Button } from '@ui/index'\n\ntype ConfigFormActionsProps = {\n cancelLabel: string\n saveLabel: string\n onCancel: () => void\n onSave: () => void\n saveDisabled?: boolean\n}\n\nexport function ConfigFormActions({\n cancelLabel,\n saveLabel,\n onCancel,\n onSave,\n saveDisabled = false,\n}: ConfigFormActionsProps) {\n return (\n <div className=\"flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700\">\n <Button type=\"button\" outline onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button type=\"button\" onClick={onSave} disabled={saveDisabled}>\n {saveLabel}\n </Button>\n </div>\n )\n}\n","/**\n * VariableListEditor\n * ==================\n * Unified variable list editor for workflow config forms.\n * Compact inline rows with numbered badges, inline editing, and remove buttons.\n * Used by: start, end, answer, variable-aggregator, variable-assigner config forms.\n */\n\nimport { useState, useCallback, useRef, useEffect, type KeyboardEvent } from 'react'\nimport { PlusIcon, XMarkIcon } from '@heroicons/react/24/outline'\n\ntype VariableListEditorProps = {\n /** Current variable names */\n variables: string[]\n /** Called when the list changes */\n onChange: (variables: string[]) => void\n /** Placeholder for the add input */\n placeholder?: string\n /** Label shown above the list */\n label?: string\n /** Button label for adding */\n addLabel?: string\n /** Color theme: green (input), blue (output), purple (aggregator), red (end) */\n color?: 'green' | 'blue' | 'purple' | 'red' | 'teal'\n /** If true, show numbered badges */\n numbered?: boolean\n /** If true, variables are inline-editable */\n editable?: boolean\n /** Maximum number of variables (0 = unlimited) */\n max?: number\n}\n\nconst COLOR_CLASSES = {\n green: {\n badge: 'bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300',\n input: 'focus:border-green-400 focus:ring-green-400/20',\n row: 'border-green-200/30 dark:border-green-500/15',\n add: 'text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300',\n dot: 'bg-green-500',\n },\n blue: {\n badge: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n input: 'focus:border-blue-400 focus:ring-blue-400/20',\n row: 'border-blue-200/30 dark:border-blue-500/15',\n add: 'text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300',\n dot: 'bg-blue-500',\n },\n purple: {\n badge: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n input: 'focus:border-purple-400 focus:ring-purple-400/20',\n row: 'border-purple-200/30 dark:border-purple-500/15',\n add: 'text-purple-600 hover:text-purple-700 dark:text-purple-400 dark:hover:text-purple-300',\n dot: 'bg-purple-500',\n },\n red: {\n badge: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n input: 'focus:border-red-400 focus:ring-red-400/20',\n row: 'border-red-200/30 dark:border-red-500/15',\n add: 'text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300',\n dot: 'bg-red-500',\n },\n teal: {\n badge: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n input: 'focus:border-teal-400 focus:ring-teal-400/20',\n row: 'border-teal-200/30 dark:border-teal-500/15',\n add: 'text-teal-600 hover:text-teal-700 dark:text-teal-400 dark:hover:text-teal-300',\n dot: 'bg-teal-500',\n },\n}\n\nexport function VariableListEditor({\n variables,\n onChange,\n placeholder = 'Variable name',\n label,\n addLabel = 'Add',\n color = 'green',\n numbered = false,\n editable = false,\n max = 0,\n}: VariableListEditorProps) {\n const [newVariable, setNewVariable] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n const colors = COLOR_CLASSES[color]\n const canAdd = max === 0 || variables.length < max\n\n const handleAdd = useCallback(() => {\n const trimmed = newVariable.trim()\n if (!trimmed || variables.includes(trimmed)) return\n onChange([...variables, trimmed])\n setNewVariable('')\n inputRef.current?.focus()\n }, [newVariable, variables, onChange])\n\n const handleRemove = useCallback((index: number) => {\n onChange(variables.filter((_, i) => i !== index))\n }, [variables, onChange])\n\n const handleEdit = useCallback((index: number, value: string) => {\n const updated = [...variables]\n updated[index] = value\n onChange(updated)\n }, [variables, onChange])\n\n const handleKeyDown = useCallback((event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n handleAdd()\n }\n }, [handleAdd])\n\n return (\n <div>\n {label && (\n <label className=\"mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400\">{label}</label>\n )}\n\n {/* Variable list */}\n {variables.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {variables.map((variable, index) => (\n <div\n key={`${index}-${variable}`}\n className={`group flex items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-colors ${colors.row} hover:bg-white/5`}\n >\n {/* Numbered badge or dot */}\n {numbered ? (\n <span className={`inline-flex h-5 min-w-5 items-center justify-center rounded-full text-[10px] font-bold ${colors.badge}`}>\n {index + 1}\n </span>\n ) : (\n <span className={`h-1.5 w-1.5 shrink-0 rounded-full ${colors.dot}`} />\n )}\n\n {/* Variable name — editable or static */}\n {editable ? (\n <input\n type=\"text\"\n value={variable}\n onChange={(event) => handleEdit(index, event.target.value)}\n className={`flex-1 rounded-md border-0 bg-transparent px-1 py-0.5 text-sm font-medium text-gray-900 outline-none ${colors.input} focus:ring-1 dark:text-white`}\n />\n ) : (\n <span className=\"flex-1 text-sm font-medium text-gray-900 dark:text-white\">{variable}</span>\n )}\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={() => handleRemove(index)}\n className=\"shrink-0 rounded p-0.5 text-gray-400 opacity-0 transition-all hover:bg-red-100 hover:text-red-500 group-hover:opacity-100 dark:hover:bg-red-500/10 dark:hover:text-red-400\"\n aria-label={`Remove ${variable}`}\n >\n <XMarkIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Add input */}\n {canAdd && (\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n type=\"text\"\n value={newVariable}\n onChange={(event) => setNewVariable(event.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 rounded-lg border border-gray-200/50 bg-gray-50/50 px-3 py-1.5 text-sm text-gray-700 outline-none transition-colors placeholder:text-gray-400 focus:border-gray-300 focus:ring-1 focus:ring-gray-300/30 dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:placeholder:text-gray-600\"\n />\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!newVariable.trim()}\n className={`flex items-center gap-1 rounded-lg px-3 py-1.5 text-xs font-semibold transition-all disabled:cursor-not-allowed disabled:opacity-40 ${colors.add} hover:bg-white/10`}\n >\n <PlusIcon className=\"h-3.5 w-3.5\" />\n {addLabel}\n </button>\n </div>\n )}\n\n {/* Empty state */}\n {variables.length === 0 && !canAdd && (\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">No variables defined</p>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { StartNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype StartNodeConfigFormProps = {\n config: StartNodeConfig\n onSave: (config: StartNodeConfig) => void\n onCancel: () => void\n}\n\nexport function StartNodeConfigForm({ config, onSave, onCancel }: StartNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.startNodeConfig')\n const [inputVariables, setInputVariables] = useState<string[]>([...config.inputVariables])\n\n const handleSave = () => {\n onSave({ ...config, inputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('inputVariablesHelp')}</p>\n <VariableListEditor\n variables={inputVariables}\n onChange={setInputVariables}\n label={t('inputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"green\"\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { EndNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype EndNodeConfigFormProps = {\n config: EndNodeConfig\n onSave: (config: EndNodeConfig) => void\n onCancel: () => void\n}\n\nexport function EndNodeConfigForm({ config, onSave, onCancel }: EndNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.endNodeConfig')\n const [outputVariables, setOutputVariables] = useState<string[]>([...config.outputVariables])\n\n const handleSave = () => {\n onSave({ ...config, outputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('outputVariablesHelp')}</p>\n <VariableListEditor\n variables={outputVariables}\n onChange={setOutputVariables}\n label={t('outputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"red\"\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Button, FormInput, FormSelect, IconButton } from '@ui/index'\nimport type { IfElseNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IfElseCondition = {\n variable: string\n operator: string\n value: string\n}\n\ntype IfElseNodeConfigFormProps = {\n config: IfElseNodeConfig\n onSave: (config: IfElseNodeConfig) => void\n onCancel: () => void\n}\n\nconst OPERATOR_OPTIONS = [\n { value: 'equals', labelKey: 'operatorEquals' },\n { value: 'not_equals', labelKey: 'operatorNotEquals' },\n { value: 'contains', labelKey: 'operatorContains' },\n { value: 'greater_than', labelKey: 'operatorGreaterThan' },\n { value: 'less_than', labelKey: 'operatorLessThan' },\n { value: 'is_empty', labelKey: 'operatorIsEmpty' },\n { value: 'is_not_empty', labelKey: 'operatorIsNotEmpty' },\n] as const\n\nexport function IfElseNodeConfigForm({ config, onSave, onCancel }: IfElseNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.ifElseNodeConfig')\n const [conditions, setConditions] = useState<IfElseCondition[]>(\n config.conditions.map((condition) => ({\n variable: condition.variable,\n operator: condition.operator,\n value: condition.value,\n }))\n )\n const [logicalOperator, setLogicalOperator] = useState<'and' | 'or'>(config.logicalOperator)\n\n const handleAddCondition = () => {\n setConditions([...conditions, { variable: '', operator: 'equals', value: '' }])\n }\n\n const handleRemoveCondition = (index: number) => {\n setConditions(conditions.filter((_, conditionIndex) => conditionIndex !== index))\n }\n\n const handleConditionChange = (index: number, field: keyof IfElseCondition, fieldValue: string) => {\n setConditions(conditions.map((condition, conditionIndex) =>\n conditionIndex === index ? { ...condition, [field]: fieldValue } : condition\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n conditions: conditions.map((condition) => ({\n variable: condition.variable,\n operator: condition.operator,\n value: condition.value,\n })),\n logicalOperator,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{t('conditionsLabel')}</label>\n <Button\n type=\"button\"\n onClick={handleAddCondition}\n >\n {t('addCondition')}\n </Button>\n </div>\n\n <div className=\"space-y-3\">\n {conditions.map((condition, index) => (\n <div key={index} className=\"flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"grid flex-1 grid-cols-3 gap-2\">\n <div>\n <FormInput\n type=\"text\"\n label={t('variableLabel')}\n value={condition.variable}\n onValueChange={(value) => handleConditionChange(index, 'variable', value)}\n placeholder={t('variableLabel')}\n inputSize=\"sm\"\n />\n </div>\n <div>\n <FormSelect\n label={t('operatorLabel')}\n value={condition.operator}\n onValueChange={(value) => handleConditionChange(index, 'operator', value)}\n options={OPERATOR_OPTIONS.map((option) => ({ value: option.value, label: t(option.labelKey) }))}\n inputSize=\"sm\"\n />\n </div>\n <div>\n <FormInput\n type=\"text\"\n label={t('valueLabel')}\n value={condition.value}\n onValueChange={(value) => handleConditionChange(index, 'value', value)}\n placeholder={t('valueLabel')}\n inputSize=\"sm\"\n />\n </div>\n </div>\n {conditions.length > 1 && (\n <IconButton\n onClick={() => handleRemoveCondition(index)}\n icon={<TrashIcon className=\"h-4 w-4\" />}\n label={t('removeCondition')}\n size=\"sm\"\n color=\"ios-red\"\n className=\"mt-5\"\n />\n )}\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">{t('logicalOperatorLabel')}</label>\n <div className=\"flex gap-2\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name=\"logicalOperator\"\n value=\"and\"\n checked={logicalOperator === 'and'}\n onChange={() => setLogicalOperator('and')}\n className=\"text-indigo-600 focus:ring-indigo-400\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">AND</span>\n </label>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name=\"logicalOperator\"\n value=\"or\"\n checked={logicalOperator === 'or'}\n onChange={() => setLogicalOperator('or')}\n className=\"text-indigo-600 focus:ring-indigo-400\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">OR</span>\n </label>\n </div>\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { CodeNodeConfig, CodeOperation } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype CodeNodeConfigFormProps = {\n config: CodeNodeConfig\n onSave: (config: CodeNodeConfig) => void\n onCancel: () => void\n}\n\n/// Two authoring modes:\n/// • **scripted** — language + code. Kept so JS/Python-first users can\n/// sketch logic ahead of the sandboxed runtime landing.\n/// • **operation** — one of the engine's JSON-only mini-language ops.\n/// This is what real graphs use (any RSS/regex/JSON-parsing step).\ntype Mode = 'scripted' | 'operation'\n\nconst LANGUAGE_OPTIONS = ['javascript', 'python', 'typescript'] as const\n\nconst OPERATION_OPTIONS: { value: CodeOperation; label: string; help: string }[] = [\n { value: 'passthrough', label: 'passthrough', help: 'Emit the incoming value unchanged.' },\n { value: 'return', label: 'return', help: 'Emit a literal JSON value.' },\n { value: 'merge', label: 'merge', help: 'Shallow-merge incoming + a literal object.' },\n { value: 'pick', label: 'pick', help: 'Project specific keys off the incoming object.' },\n { value: 'parse_json', label: 'parse_json', help: 'Parse a stringified JSON out of an upstream field (e.g. an agent\\'s `.text`).' },\n { value: 'regex_extract', label: 'regex_extract', help: 'Run a regex over `from`, return the capture group.' },\n { value: 'xml_titles', label: 'xml_titles', help: 'Extract every `<title>` from an RSS/Atom body.' },\n]\n\nfunction hasLanguage(config: CodeNodeConfig): config is Extract<CodeNodeConfig, { language: unknown }> {\n return 'language' in config && typeof config.language === 'string'\n}\nfunction hasOperation(config: CodeNodeConfig): config is Extract<CodeNodeConfig, { operation: CodeOperation }> {\n return 'operation' in config && typeof config.operation === 'string'\n}\n\nexport function CodeNodeConfigForm({ config, onSave, onCancel }: CodeNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.codeNodeConfig')\n\n const initialMode: Mode = hasOperation(config) ? 'operation' : 'scripted'\n const [mode, setMode] = useState<Mode>(initialMode)\n\n // Scripted-mode state\n const [language, setLanguage] = useState<'javascript' | 'python' | 'typescript'>(\n hasLanguage(config) ? config.language : 'javascript',\n )\n const [code, setCode] = useState(hasLanguage(config) ? config.code : '')\n\n // Operation-mode state\n const op0 = hasOperation(config) ? config : undefined\n const [operation, setOperation] = useState<CodeOperation>(op0?.operation ?? 'passthrough')\n const [from, setFrom] = useState<string>(op0?.from ?? '')\n const [valueText, setValueText] = useState<string>(\n op0?.value !== undefined ? JSON.stringify(op0.value, null, 2) : '',\n )\n const [fieldsText, setFieldsText] = useState<string>((op0?.fields ?? []).join(', '))\n const [pattern, setPattern] = useState<string>(op0?.pattern ?? '')\n const [flags, setFlags] = useState<string>(op0?.flags ?? '')\n const [group, setGroup] = useState<number>(op0?.group ?? 1)\n const [output, setOutput] = useState<string>(op0?.output ?? '')\n const [keepChannel, setKeepChannel] = useState<boolean>(op0?.keepChannel ?? false)\n\n const selectedOpHelp = useMemo(\n () => OPERATION_OPTIONS.find((o) => o.value === operation)?.help ?? '',\n [operation],\n )\n\n const handleSave = () => {\n if (mode === 'scripted') {\n onSave({ type: 'code', language, code })\n return\n }\n const next: CodeNodeConfig = { type: 'code', operation }\n if (from.trim()) next.from = from.trim()\n if (operation === 'return' && valueText.trim()) {\n try { next.value = JSON.parse(valueText) } catch { next.value = valueText }\n }\n if (operation === 'merge' && valueText.trim()) {\n try { next.value = JSON.parse(valueText) } catch { next.value = valueText }\n }\n if (operation === 'pick') {\n next.fields = fieldsText.split(',').map((s) => s.trim()).filter(Boolean)\n }\n if (operation === 'regex_extract') {\n next.pattern = pattern\n if (flags.trim()) next.flags = flags.trim()\n if (group !== 1) next.group = group\n }\n if (operation === 'xml_titles' && keepChannel) next.keepChannel = true\n if ((operation === 'regex_extract' || operation === 'xml_titles') && output.trim()) {\n next.output = output.trim()\n }\n onSave(next)\n }\n\n const labelClass = 'mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300'\n const inputClass = 'w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500'\n const textareaClass = `${inputClass} font-mono text-xs`\n\n return (\n <div className=\"space-y-4\">\n {/* ── Mode selector ────────────────────────────────────────── */}\n <div className=\"flex gap-2 rounded-lg bg-gray-100 p-1 text-sm dark:bg-gray-800\">\n <button\n type=\"button\"\n onClick={() => setMode('operation')}\n className={`flex-1 rounded-md px-3 py-1.5 font-medium transition ${\n mode === 'operation'\n ? 'bg-white text-indigo-600 shadow-sm dark:bg-gray-900 dark:text-indigo-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {t('modeOperation', { _: 'Operation' } as never)}\n </button>\n <button\n type=\"button\"\n onClick={() => setMode('scripted')}\n className={`flex-1 rounded-md px-3 py-1.5 font-medium transition ${\n mode === 'scripted'\n ? 'bg-white text-indigo-600 shadow-sm dark:bg-gray-900 dark:text-indigo-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {t('modeScripted', { _: 'Scripted' } as never)}\n </button>\n </div>\n\n {mode === 'scripted' ? (\n <>\n <div>\n <label className={labelClass}>{t('languageLabel')}</label>\n <select\n value={language}\n onChange={(event) => setLanguage(event.target.value as typeof language)}\n className={inputClass}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <option key={option} value={option}>{option}</option>\n ))}\n </select>\n <p className=\"mt-1 text-[11px] text-amber-600 dark:text-amber-400\">\n The engine has no embedded script runtime — scripted nodes fail\n at execution today. Prefer the Operation mode for real graphs.\n </p>\n </div>\n\n <div>\n <label className={labelClass}>{t('codeLabel')}</label>\n <textarea\n value={code}\n onChange={(event) => setCode(event.target.value)}\n placeholder={t('codePlaceholder')}\n rows={10}\n className={textareaClass}\n />\n </div>\n </>\n ) : (\n <>\n <div>\n <label className={labelClass}>Operation</label>\n <select\n value={operation}\n onChange={(event) => setOperation(event.target.value as CodeOperation)}\n className={inputClass}\n >\n {OPERATION_OPTIONS.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">{selectedOpHelp}</p>\n </div>\n\n {/* `from` applies to every op except `return` (which has no input) */}\n {operation !== 'return' && (\n <div>\n <label className={labelClass}>from</label>\n <input\n type=\"text\"\n value={from}\n onChange={(event) => setFrom(event.target.value)}\n placeholder=\"e.g. http-news.body\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n Dotted reference into the variable pool. Leave blank to read the sole incoming edge.\n </p>\n </div>\n )}\n\n {(operation === 'return' || operation === 'merge') && (\n <div>\n <label className={labelClass}>\n value {operation === 'merge' ? '(object to merge in)' : '(literal JSON)'}\n </label>\n <textarea\n value={valueText}\n onChange={(event) => setValueText(event.target.value)}\n placeholder='{\"recommendedPrice\": 6.29}'\n rows={6}\n className={textareaClass}\n />\n </div>\n )}\n\n {operation === 'pick' && (\n <div>\n <label className={labelClass}>fields</label>\n <input\n type=\"text\"\n value={fieldsText}\n onChange={(event) => setFieldsText(event.target.value)}\n placeholder=\"id, name, state\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">Comma-separated keys to project.</p>\n </div>\n )}\n\n {operation === 'regex_extract' && (\n <>\n <div>\n <label className={labelClass}>pattern</label>\n <input\n type=\"text\"\n value={pattern}\n onChange={(event) => setPattern(event.target.value)}\n placeholder={`R\\\\$(\\\\d+\\\\.\\\\d+)`}\n className={`${inputClass} font-mono text-xs`}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className={labelClass}>flags</label>\n <input\n type=\"text\"\n value={flags}\n onChange={(event) => setFlags(event.target.value)}\n placeholder=\"e.g. i or ims\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">i, m, s, x, U, R (g is implicit).</p>\n </div>\n <div>\n <label className={labelClass}>group</label>\n <input\n type=\"number\"\n value={group}\n onChange={(event) => setGroup(Number(event.target.value) || 0)}\n min={0}\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">0 = whole match, 1 = first capture group (default).</p>\n </div>\n </div>\n </>\n )}\n\n {operation === 'xml_titles' && (\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n checked={keepChannel}\n onChange={(event) => setKeepChannel(event.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n Keep channel/feed title (default: drop the first `&lt;title&gt;`).\n </label>\n )}\n\n {(operation === 'regex_extract' || operation === 'xml_titles') && (\n <div>\n <label className={labelClass}>output key</label>\n <input\n type=\"text\"\n value={output}\n onChange={(event) => setOutput(event.target.value)}\n placeholder={operation === 'regex_extract' ? 'matches' : 'titles'}\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n Defaults to `{operation === 'regex_extract' ? 'matches' : 'titles'}` if left blank.\n </p>\n </div>\n )}\n </>\n )}\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Button, FormInput, FormSelect, FormTextarea, IconButton } from '@ui/index'\nimport type { HttpRequestNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype HeaderEntry = {\n key: string\n value: string\n}\n\ntype HttpRequestNodeConfigFormProps = {\n config: HttpRequestNodeConfig\n onSave: (config: HttpRequestNodeConfig) => void\n onCancel: () => void\n}\n\nconst HTTP_METHODS = ['GET', 'POST', 'PUT', 'DELETE'] as const\n\nfunction headersToEntries(headers: Record<string, string>): HeaderEntry[] {\n return Object.entries(headers).map(([key, value]) => ({ key, value }))\n}\n\nfunction entriesToHeaders(entries: HeaderEntry[]): Record<string, string> {\n const headers: Record<string, string> = {}\n for (const entry of entries) {\n if (entry.key.trim()) {\n headers[entry.key.trim()] = entry.value\n }\n }\n return headers\n}\n\nexport function HttpRequestNodeConfigForm({ config, onSave, onCancel }: HttpRequestNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.httpRequestNodeConfig')\n const [method, setMethod] = useState<HttpRequestNodeConfig['method']>(config.method)\n const [url, setUrl] = useState(config.url)\n const [headerEntries, setHeaderEntries] = useState<HeaderEntry[]>(headersToEntries(config.headers))\n const [body, setBody] = useState(config.body ?? '')\n const [timeoutMs, setTimeoutMs] = useState(config.timeoutMs)\n const [parseResponse, setParseResponse] = useState<NonNullable<HttpRequestNodeConfig['parseResponse']>>(config.parseResponse ?? 'json')\n\n const handleAddHeader = () => {\n setHeaderEntries([...headerEntries, { key: '', value: '' }])\n }\n\n const handleRemoveHeader = (index: number) => {\n setHeaderEntries(headerEntries.filter((_, headerIndex) => headerIndex !== index))\n }\n\n const handleHeaderChange = (index: number, field: keyof HeaderEntry, fieldValue: string) => {\n setHeaderEntries(headerEntries.map((entry, headerIndex) =>\n headerIndex === index ? { ...entry, [field]: fieldValue } : entry\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n method,\n url,\n headers: entriesToHeaders(headerEntries),\n body: method === 'GET' ? '' : body,\n timeoutMs,\n parseResponse,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormSelect\n label={t('methodLabel')}\n value={method}\n onValueChange={(value) => setMethod(value as HttpRequestNodeConfig['method'])}\n options={HTTP_METHODS.map((httpMethod) => ({ value: httpMethod, label: httpMethod }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('urlLabel')}\n value={url}\n onValueChange={setUrl}\n placeholder={t('urlPlaceholder')}\n />\n\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{t('headersLabel')}</label>\n <Button\n type=\"button\"\n onClick={handleAddHeader}\n >\n {t('addHeader')}\n </Button>\n </div>\n <div className=\"space-y-2\">\n {headerEntries.map((entry, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <FormInput\n type=\"text\"\n value={entry.key}\n onValueChange={(value) => handleHeaderChange(index, 'key', value)}\n placeholder={t('headerKeyPlaceholder')}\n className=\"flex-1\"\n />\n <FormInput\n type=\"text\"\n value={entry.value}\n onValueChange={(value) => handleHeaderChange(index, 'value', value)}\n placeholder={t('headerValuePlaceholder')}\n className=\"flex-1\"\n />\n <IconButton\n onClick={() => handleRemoveHeader(index)}\n icon={<TrashIcon className=\"h-4 w-4\" />}\n label={t('removeHeader')}\n size=\"sm\"\n color=\"ios-red\"\n />\n </div>\n ))}\n </div>\n </div>\n\n {method !== 'GET' && (\n <FormTextarea\n label={t('bodyLabel')}\n value={body}\n onValueChange={setBody}\n placeholder={t('bodyPlaceholder')}\n rows={5}\n className=\"font-mono text-xs\"\n />\n )}\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n max={60000}\n step={1000}\n />\n\n <FormSelect\n label={t('parseResponseLabel')}\n value={parseResponse}\n onValueChange={(value) => setParseResponse(value as 'json' | 'text')}\n options={[\n { value: 'json', label: t('parseResponseJson') },\n { value: 'text', label: t('parseResponseText') },\n ]}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { S3WriteNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype S3WriteNodeConfigFormProps = {\n config: S3WriteNodeConfig\n onSave: (config: S3WriteNodeConfig) => void\n onCancel: () => void\n}\n\nexport function S3WriteNodeConfigForm({ config, onSave, onCancel }: S3WriteNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.s3WriteNodeConfig')\n const [bucket, setBucket] = useState(config.bucket ?? '')\n const [key, setKey] = useState(config.key ?? '')\n const [sourceUrl, setSourceUrl] = useState(config.sourceUrl ?? '')\n const [body, setBody] = useState(config.body ?? '')\n const [contentType, setContentType] = useState(config.contentType ?? '')\n const [timeoutMs, setTimeoutMs] = useState<number>(config.timeoutMs ?? 300000)\n const [connectionId, setConnectionId] = useState(config.connectionId ?? '')\n\n const handleSave = () => {\n onSave({\n ...config,\n bucket,\n key,\n sourceUrl,\n body,\n contentType,\n timeoutMs,\n connectionId,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('bucketLabel')}\n value={bucket}\n onValueChange={setBucket}\n placeholder={t('bucketPlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('keyLabel')}\n value={key}\n onValueChange={setKey}\n placeholder={t('keyPlaceholder')}\n />\n\n <div className=\"rounded-lg border border-cyan-200/40 bg-cyan-50/40 px-3 py-2 text-[11px] text-cyan-900 dark:border-cyan-500/30 dark:bg-cyan-500/10 dark:text-cyan-100\">\n {t('sourceOrBodyHint')}\n </div>\n\n <FormInput\n type=\"text\"\n label={t('sourceUrlLabel')}\n value={sourceUrl}\n onValueChange={setSourceUrl}\n placeholder={t('sourceUrlPlaceholder')}\n />\n\n <FormTextarea\n label={t('bodyLabel')}\n value={body}\n onValueChange={setBody}\n placeholder={t('bodyPlaceholder')}\n rows={5}\n className=\"font-mono text-xs\"\n />\n\n <FormInput\n type=\"text\"\n label={t('contentTypeLabel')}\n value={contentType}\n onValueChange={setContentType}\n placeholder=\"application/json\"\n />\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n step={1000}\n />\n\n <FormInput\n type=\"text\"\n label={t('connectionIdLabel')}\n value={connectionId}\n onValueChange={setConnectionId}\n placeholder={t('connectionIdHelp')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { TemplateTransformNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype TemplateTransformNodeConfigFormProps = {\n config: TemplateTransformNodeConfig\n onSave: (config: TemplateTransformNodeConfig) => void\n onCancel: () => void\n}\n\nexport function TemplateTransformNodeConfigForm({ config, onSave, onCancel }: TemplateTransformNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.templateTransformNodeConfig')\n const [template, setTemplate] = useState(config.template)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n\n const handleSave = () => {\n onSave({ ...config, template, outputVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormTextarea\n label={t('templateLabel')}\n value={template}\n onValueChange={setTemplate}\n placeholder={t('templatePlaceholder')}\n rows={6}\n className=\"font-mono text-xs\"\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { IterationNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IterationNodeConfigFormProps = {\n config: IterationNodeConfig\n onSave: (config: IterationNodeConfig) => void\n onCancel: () => void\n}\n\nexport function IterationNodeConfigForm({ config, onSave, onCancel }: IterationNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.iterationNodeConfig')\n const [iteratorVariable, setIteratorVariable] = useState(config.iteratorVariable)\n const [maxIterations, setMaxIterations] = useState(config.maxIterations)\n\n const handleSave = () => {\n onSave({ ...config, iteratorVariable, maxIterations })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('iteratorVariableLabel')}\n value={iteratorVariable}\n onValueChange={setIteratorVariable}\n placeholder={t('iteratorVariablePlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('maxIterationsLabel')}\n value={String(maxIterations)}\n onValueChange={(value) => setMaxIterations(Number(value))}\n min={1}\n max={10000}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { KnowledgeBaseNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype KnowledgeBaseNodeConfigFormProps = {\n config: KnowledgeBaseNodeConfig\n onSave: (config: KnowledgeBaseNodeConfig) => void\n onCancel: () => void\n}\n\nexport function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }: KnowledgeBaseNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.knowledgeBaseNodeConfig')\n const [sourceId, setSourceId] = useState(config.sourceId)\n const [topK, setTopK] = useState(config.topK)\n const [similarityThreshold, setSimilarityThreshold] = useState(config.similarityThreshold)\n\n const handleSave = () => {\n onSave({ ...config, sourceId, topK, similarityThreshold })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('sourceIdLabel')}\n value={sourceId}\n onValueChange={setSourceId}\n placeholder={t('sourceIdPlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('topKLabel')}\n value={String(topK)}\n onValueChange={(value) => setTopK(Number(value))}\n min={1}\n max={20}\n />\n\n <FormInput\n type=\"number\"\n label={t('similarityThresholdLabel')}\n value={String(similarityThreshold)}\n onValueChange={(value) => setSimilarityThreshold(Number(value))}\n min={0}\n max={1}\n step={0.1}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormTextarea } from '@ui/index'\nimport type { AnswerNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype AnswerNodeConfigFormProps = {\n config: AnswerNodeConfig\n onSave: (config: AnswerNodeConfig) => void\n onCancel: () => void\n}\n\nexport function AnswerNodeConfigForm({ config, onSave, onCancel }: AnswerNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.answerNodeConfig')\n const [outputTemplate, setOutputTemplate] = useState(config.outputTemplate)\n const [outputVariables, setOutputVariables] = useState<string[]>([...config.outputVariables])\n\n const handleSave = () => {\n onSave({ ...config, outputTemplate, outputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormTextarea\n label={t('outputTemplateLabel')}\n hint={t('outputTemplateHelp')}\n value={outputTemplate}\n onValueChange={setOutputTemplate}\n placeholder={t('outputTemplatePlaceholder')}\n rows={6}\n className=\"font-mono text-xs\"\n />\n\n <VariableListEditor\n variables={outputVariables}\n onChange={setOutputVariables}\n label={t('outputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"blue\"\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { QuestionClassifierNodeConfig } from '../../contracts'\n\ntype ClassifierCategory = {\n id: string\n name: string\n description: string\n}\n\ntype QuestionClassifierNodeConfigFormProps = {\n config: QuestionClassifierNodeConfig\n onSave: (config: QuestionClassifierNodeConfig) => void\n onCancel: () => void\n}\n\nexport function QuestionClassifierNodeConfigForm({ config, onSave, onCancel }: QuestionClassifierNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.questionClassifierNodeConfig')\n const [modelId, setModelId] = useState(config.modelId)\n const [instructions, setInstructions] = useState(config.instructions)\n const [categories, setCategories] = useState<ClassifierCategory[]>(\n config.categories.map((category) => ({ ...category }))\n )\n\n const handleAddCategory = () => {\n setCategories([...categories, { id: `cat-${Date.now()}`, name: '', description: '' }])\n }\n\n const handleRemoveCategory = (index: number) => {\n if (categories.length <= 2) return\n setCategories(categories.filter((_, categoryIndex) => categoryIndex !== index))\n }\n\n const handleCategoryChange = (index: number, field: keyof ClassifierCategory, fieldValue: string) => {\n setCategories(categories.map((category, categoryIndex) =>\n categoryIndex === index ? { ...category, [field]: fieldValue } : category\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n modelId,\n instructions,\n categories: categories.map((category) => ({\n id: category.id,\n name: category.name,\n description: category.description,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('modelIdLabel')}\n </label>\n <input\n type=\"text\"\n value={modelId}\n onChange={(event) => setModelId(event.target.value)}\n placeholder={t('modelIdPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('instructionsLabel')}\n </label>\n <textarea\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n placeholder={t('instructionsPlaceholder')}\n rows={4}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('categoriesLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddCategory}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addCategory')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {categories.map((category, index) => (\n <div key={category.id} className=\"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n {t('categoryIndex', { index: index + 1 })}\n </span>\n {categories.length > 2 && (\n <button\n type=\"button\"\n onClick={() => handleRemoveCategory(index)}\n className=\"text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeCategory')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={category.name}\n onChange={(event) => handleCategoryChange(index, 'name', event.target.value)}\n placeholder={t('categoryNamePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n <input\n type=\"text\"\n value={category.description}\n onChange={(event) => handleCategoryChange(index, 'description', event.target.value)}\n placeholder={t('categoryDescriptionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { ParameterExtractorNodeConfig } from '../../contracts'\n\ntype ExtractorParameter = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array'\n description: string\n required: boolean\n}\n\ntype ParameterExtractorNodeConfigFormProps = {\n config: ParameterExtractorNodeConfig\n onSave: (config: ParameterExtractorNodeConfig) => void\n onCancel: () => void\n}\n\nconst PARAMETER_TYPES = ['string', 'number', 'boolean', 'array'] as const\n\nexport function ParameterExtractorNodeConfigForm({ config, onSave, onCancel }: ParameterExtractorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.parameterExtractorNodeConfig')\n const [modelId, setModelId] = useState(config.modelId)\n const [parameters, setParameters] = useState<ExtractorParameter[]>(\n config.parameters.map((parameter) => ({ ...parameter }))\n )\n\n const handleAddParameter = () => {\n setParameters([...parameters, { name: '', type: 'string', description: '', required: false }])\n }\n\n const handleRemoveParameter = (index: number) => {\n setParameters(parameters.filter((_, parameterIndex) => parameterIndex !== index))\n }\n\n const handleParameterChange = (index: number, field: keyof ExtractorParameter, fieldValue: string | boolean) => {\n setParameters(parameters.map((parameter, parameterIndex) =>\n parameterIndex === index ? { ...parameter, [field]: fieldValue } : parameter\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n modelId,\n parameters: parameters.map((parameter) => ({\n name: parameter.name,\n type: parameter.type,\n description: parameter.description,\n required: parameter.required,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('modelIdLabel')}\n </label>\n <input\n type=\"text\"\n value={modelId}\n onChange={(event) => setModelId(event.target.value)}\n placeholder={t('modelIdPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('parametersLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddParameter}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addParameter')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {parameters.map((parameter, index) => (\n <div key={index} className=\"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"mb-2 flex items-center justify-end\">\n <button\n type=\"button\"\n onClick={() => handleRemoveParameter(index)}\n className=\"text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeParameter')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterNameLabel')}</label>\n <input\n type=\"text\"\n value={parameter.name}\n onChange={(event) => handleParameterChange(index, 'name', event.target.value)}\n placeholder={t('parameterNamePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterTypeLabel')}</label>\n <select\n value={parameter.type}\n onChange={(event) => handleParameterChange(index, 'type', event.target.value)}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {PARAMETER_TYPES.map((parameterType) => (\n <option key={parameterType} value={parameterType}>{parameterType}</option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"mt-2\">\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterDescriptionLabel')}</label>\n <input\n type=\"text\"\n value={parameter.description}\n onChange={(event) => handleParameterChange(index, 'description', event.target.value)}\n placeholder={t('parameterDescriptionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div className=\"mt-2\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={parameter.required}\n onChange={(event) => handleParameterChange(index, 'required', event.target.checked)}\n className=\"rounded border-gray-300 text-indigo-600 focus:ring-indigo-400 dark:border-gray-600\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{t('parameterRequiredLabel')}</span>\n </label>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { VariableAssignerNodeConfig } from '../../contracts'\n\ntype Assignment = {\n target: string\n source: string\n}\n\ntype VariableAssignerNodeConfigFormProps = {\n config: VariableAssignerNodeConfig\n onSave: (config: VariableAssignerNodeConfig) => void\n onCancel: () => void\n}\n\nexport function VariableAssignerNodeConfigForm({ config, onSave, onCancel }: VariableAssignerNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.variableAssignerNodeConfig')\n const [assignments, setAssignments] = useState<Assignment[]>(\n config.assignments.map((assignment) => ({ ...assignment }))\n )\n\n const handleAddAssignment = () => {\n setAssignments([...assignments, { target: '', source: '' }])\n }\n\n const handleRemoveAssignment = (index: number) => {\n setAssignments(assignments.filter((_, assignmentIndex) => assignmentIndex !== index))\n }\n\n const handleAssignmentChange = (index: number, field: keyof Assignment, fieldValue: string) => {\n setAssignments(assignments.map((assignment, assignmentIndex) =>\n assignmentIndex === index ? { ...assignment, [field]: fieldValue } : assignment\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n assignments: assignments.map((assignment) => ({\n target: assignment.target,\n source: assignment.source,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('assignmentsLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddAssignment}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addAssignment')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {assignments.map((assignment, index) => (\n <div key={index} className=\"flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"grid flex-1 grid-cols-2 gap-2\">\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('targetLabel')}</label>\n <input\n type=\"text\"\n value={assignment.target}\n onChange={(event) => handleAssignmentChange(index, 'target', event.target.value)}\n placeholder={t('targetPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('sourceLabel')}</label>\n <input\n type=\"text\"\n value={assignment.source}\n onChange={(event) => handleAssignmentChange(index, 'source', event.target.value)}\n placeholder={t('sourcePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => handleRemoveAssignment(index)}\n className=\"mt-5 text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeAssignment')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { VariableAggregatorNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype VariableAggregatorNodeConfigFormProps = {\n config: VariableAggregatorNodeConfig\n onSave: (config: VariableAggregatorNodeConfig) => void\n onCancel: () => void\n}\n\nconst AGGREGATION_MODES = ['array', 'object', 'concatenate'] as const\n\nexport function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }: VariableAggregatorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.variableAggregatorNodeConfig')\n const [inputVariables, setInputVariables] = useState<string[]>([...config.inputVariables])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [aggregationMode, setAggregationMode] = useState<VariableAggregatorNodeConfig['aggregationMode']>(config.aggregationMode)\n\n const handleSave = () => {\n onSave({ ...config, inputVariables, outputVariable, aggregationMode })\n }\n\n return (\n <div className=\"space-y-4\">\n <VariableListEditor\n variables={inputVariables}\n onChange={setInputVariables}\n label={t('inputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addInputVariable')}\n color=\"purple\"\n numbered\n editable\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <FormSelect\n label={t('aggregationModeLabel')}\n value={aggregationMode}\n onValueChange={(value) => setAggregationMode(value as VariableAggregatorNodeConfig['aggregationMode'])}\n options={AGGREGATION_MODES.map((mode) => ({\n value: mode,\n label: t(`mode${mode.charAt(0).toUpperCase()}${mode.slice(1)}`),\n }))}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n saveDisabled={!outputVariable.trim() || inputVariables.length === 0 || inputVariables.some((variable) => !variable.trim())}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { DocumentExtractorNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype DocumentExtractorNodeConfigFormProps = {\n config: DocumentExtractorNodeConfig\n onSave: (config: DocumentExtractorNodeConfig) => void\n onCancel: () => void\n}\n\nconst EXTRACTION_MODES = ['text', 'table', 'structured'] as const\n\nexport function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }: DocumentExtractorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.documentExtractorNodeConfig')\n const [extractionMode, setExtractionMode] = useState<DocumentExtractorNodeConfig['extractionMode']>(config.extractionMode)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n\n const handleSave = () => {\n onSave({ ...config, extractionMode, outputVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormSelect\n label={t('extractionModeLabel')}\n value={extractionMode}\n onValueChange={(value) => setExtractionMode(value as DocumentExtractorNodeConfig['extractionMode'])}\n options={EXTRACTION_MODES.map((mode) => ({ value: mode, label: t(`extractionMode_${mode}`) }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { ListOperatorNodeConfig } from '../../contracts'\n\ntype ListOperatorNodeConfigFormProps = {\n config: ListOperatorNodeConfig\n onSave: (config: ListOperatorNodeConfig) => void\n onCancel: () => void\n}\n\nconst OPERATION_OPTIONS = ['filter', 'map', 'sort', 'limit', 'deduplicate', 'flatten'] as const\nconst SORT_ORDER_OPTIONS = ['asc', 'desc'] as const\n\nexport function ListOperatorNodeConfigForm({ config, onSave, onCancel }: ListOperatorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.listOperatorNodeConfig')\n const [operation, setOperation] = useState<ListOperatorNodeConfig['operation']>(config.operation)\n const [inputVariable, setInputVariable] = useState(config.inputVariable)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [condition, setCondition] = useState(config.condition ?? '')\n const [sortKey, setSortKey] = useState(config.sortKey ?? '')\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>(config.sortOrder ?? 'asc')\n const [limitCount, setLimitCount] = useState(config.limitCount ?? 10)\n\n const showConditionField = operation === 'filter' || operation === 'map'\n const showSortFields = operation === 'sort'\n const showLimitField = operation === 'limit'\n\n const handleSave = () => {\n const updatedConfig: ListOperatorNodeConfig = {\n ...config,\n operation,\n inputVariable,\n outputVariable,\n }\n\n if (showConditionField) {\n updatedConfig.condition = condition\n }\n if (showSortFields) {\n updatedConfig.sortKey = sortKey\n updatedConfig.sortOrder = sortOrder\n }\n if (showLimitField) {\n updatedConfig.limitCount = limitCount\n }\n\n onSave(updatedConfig)\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('operationLabel')}\n </label>\n <select\n value={operation}\n onChange={(event) => setOperation(event.target.value as ListOperatorNodeConfig['operation'])}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {OPERATION_OPTIONS.map((operationOption) => (\n <option key={operationOption} value={operationOption}>{t(`operation_${operationOption}`)}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('inputVariableLabel')}\n </label>\n <input\n type=\"text\"\n value={inputVariable}\n onChange={(event) => setInputVariable(event.target.value)}\n placeholder={t('inputVariablePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('outputVariableLabel')}\n </label>\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder={t('outputVariablePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n {showConditionField && (\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('conditionLabel')}\n </label>\n <input\n type=\"text\"\n value={condition}\n onChange={(event) => setCondition(event.target.value)}\n placeholder={t('conditionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n )}\n\n {showSortFields && (\n <>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('sortKeyLabel')}\n </label>\n <input\n type=\"text\"\n value={sortKey}\n onChange={(event) => setSortKey(event.target.value)}\n placeholder={t('sortKeyPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('sortOrderLabel')}\n </label>\n <select\n value={sortOrder}\n onChange={(event) => setSortOrder(event.target.value as 'asc' | 'desc')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {SORT_ORDER_OPTIONS.map((order) => (\n <option key={order} value={order}>{t(`sortOrder_${order}`)}</option>\n ))}\n </select>\n </div>\n </>\n )}\n\n {showLimitField && (\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('limitCountLabel')}\n </label>\n <input\n type=\"number\"\n value={limitCount}\n onChange={(event) => setLimitCount(Number(event.target.value))}\n min={1}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { IterationStartNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IterationStartNodeConfigFormProps = {\n config: IterationStartNodeConfig\n onSave: (config: IterationStartNodeConfig) => void\n onCancel: () => void\n}\n\nexport function IterationStartNodeConfigForm({ config, onSave, onCancel }: IterationStartNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.iterationStartNodeConfig')\n const [iteratorVariable, setIteratorVariable] = useState(config.iteratorVariable)\n const [itemVariable, setItemVariable] = useState(config.itemVariable)\n const [indexVariable, setIndexVariable] = useState(config.indexVariable)\n\n const handleSave = () => {\n onSave({ ...config, iteratorVariable, itemVariable, indexVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('iteratorVariableLabel')}\n value={iteratorVariable}\n onValueChange={setIteratorVariable}\n placeholder={t('iteratorVariablePlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('itemVariableLabel')}\n value={itemVariable}\n onValueChange={setItemVariable}\n placeholder={t('itemVariablePlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('indexVariableLabel')}\n value={indexVariable}\n onValueChange={setIndexVariable}\n placeholder={t('indexVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState, useMemo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { XMarkIcon, PlusIcon } from '@heroicons/react/24/outline'\nimport type { EntityNodeConfig } from '../../contracts'\nimport type { WorkflowEntityDefinition } from '../../types'\nimport { getEntityBadgeColor, getEntityGradient } from '../../constants/entity-colors'\n\ntype EntityNodeConfigFormProps = {\n config: EntityNodeConfig\n entities?: WorkflowEntityDefinition[]\n onSave: (config: EntityNodeConfig) => void\n onCancel: () => void\n}\n\nconst FIELD_TYPE_BADGE_COLORS: Record<string, string> = {\n string: 'bg-gray-100 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300',\n number: 'bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300',\n boolean: 'bg-green-100 text-green-600 dark:bg-green-500/20 dark:text-green-300',\n date: 'bg-amber-100 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300',\n object: 'bg-purple-100 text-purple-600 dark:bg-purple-500/20 dark:text-purple-300',\n array: 'bg-teal-100 text-teal-600 dark:bg-teal-500/20 dark:text-teal-300',\n}\n\nexport function EntityNodeConfigForm({ config, entities = [], onSave, onCancel }: EntityNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.entityNodeConfig')\n const [selectedFields, setSelectedFields] = useState<string[]>([...config.selectedFields])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [limit, setLimit] = useState(config.limit)\n const [filterVariables, setFilterVariables] = useState<Record<string, string>>({ ...config.filterVariables })\n\n const entityDefinition = useMemo(\n () => entities.find((entity) => entity.id === config.entityMasterId),\n [entities, config.entityMasterId]\n )\n const availableFields = useMemo(() => entityDefinition?.fields ?? [], [entityDefinition])\n const allFieldNames = useMemo(() => availableFields.map((field) => field.name), [availableFields])\n\n const allSelected = selectedFields.length === allFieldNames.length\n const gradient = getEntityGradient(config.entityMasterId)\n const badgeColor = getEntityBadgeColor(config.entityMasterId)\n\n const handleToggleSelectAll = () => {\n if (allSelected) {\n setSelectedFields([])\n } else {\n setSelectedFields([...allFieldNames])\n }\n }\n\n const handleToggleField = (fieldName: string) => {\n setSelectedFields((previous) =>\n previous.includes(fieldName)\n ? previous.filter((name) => name !== fieldName)\n : [...previous, fieldName]\n )\n }\n\n const handleAddFilter = () => {\n setFilterVariables((previous) => ({ ...previous, '': '' }))\n }\n\n const handleUpdateFilterVariable = (oldKey: string, newKey: string) => {\n setFilterVariables((previous) => {\n const updated = { ...previous }\n const value = updated[oldKey] ?? ''\n delete updated[oldKey]\n updated[newKey] = value\n return updated\n })\n }\n\n const handleUpdateFilterField = (key: string, newValue: string) => {\n setFilterVariables((previous) => ({ ...previous, [key]: newValue }))\n }\n\n const handleRemoveFilter = (key: string) => {\n setFilterVariables((previous) => {\n const updated = { ...previous }\n delete updated[key]\n return updated\n })\n }\n\n const handleSave = () => {\n // Clean up empty filter entries\n const cleanedFilters: Record<string, string> = {}\n for (const [key, value] of Object.entries(filterVariables)) {\n if (key.trim() && value.trim()) {\n cleanedFilters[key.trim()] = value.trim()\n }\n }\n\n onSave({\n ...config,\n selectedFields,\n outputVariable: outputVariable.trim(),\n limit,\n filterVariables: cleanedFilters,\n })\n }\n\n const filterEntries = Object.entries(filterVariables)\n\n return (\n <div className=\"space-y-5\">\n {/* Entity type badge (read-only) */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('entityTypeLabel')}\n </label>\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-6 w-6 items-center justify-center rounded-md bg-gradient-to-br ${gradient}`}>\n <span className=\"text-[10px] text-white font-bold\">\n {(entityDefinition?.label ?? config.entityMasterId ?? '?').charAt(0).toUpperCase()}\n </span>\n </div>\n <span className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${badgeColor}`}>\n {entityDefinition?.label ?? config.entityMasterId ?? t('entityTypeLabel')}\n </span>\n </div>\n {!entityDefinition && (\n <p className=\"mt-2 text-xs text-amber-600 dark:text-amber-400\">\n {t('entityNotConfigured')}\n </p>\n )}\n </div>\n\n {/* Output variable */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('outputVariableLabel')}\n </label>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('outputVariableHelp')}</p>\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder={`${(entityDefinition?.label ?? 'entity').replace(/\\s+/g, '')}Data`}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n {/* Record limit */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('limitLabel')}\n </label>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('limitHelp')}</p>\n <input\n type=\"number\"\n value={limit}\n onChange={(event) => setLimit(Math.max(1, Number.parseInt(event.target.value, 10) || 1))}\n min={1}\n max={1000}\n className=\"w-32 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n />\n </div>\n\n {/* Fields section */}\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('fieldsLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleToggleSelectAll}\n className=\"text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300\"\n >\n {allSelected ? t('deselectAll') : t('selectAll')}\n </button>\n </div>\n\n {selectedFields.length === 0 && (\n <p className=\"mb-2 text-xs text-amber-600 dark:text-amber-400\">{t('noFieldsSelected')}</p>\n )}\n\n <div className=\"max-h-48 space-y-1 overflow-y-auto rounded-lg border border-gray-200 p-2 dark:border-gray-700\">\n {availableFields.length === 0 && (\n <p className=\"px-2 py-2 text-xs text-gray-500 dark:text-gray-400\">\n {t('noFieldsSelected')}\n </p>\n )}\n {availableFields.map((field) => {\n const isSelected = selectedFields.includes(field.name)\n const typeBadgeColor = FIELD_TYPE_BADGE_COLORS[field.type] ?? FIELD_TYPE_BADGE_COLORS.string\n\n return (\n <label\n key={field.name}\n className={`flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 transition-colors ${\n isSelected\n ? 'bg-indigo-50 dark:bg-indigo-500/10'\n : 'hover:bg-gray-50 dark:hover:bg-gray-800'\n }`}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => handleToggleField(field.name)}\n className=\"h-3.5 w-3.5 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n <span className=\"flex-1 text-xs font-medium text-gray-900 dark:text-white\">\n {field.name}\n </span>\n <span className={`rounded-full px-1.5 py-0.5 text-[9px] font-medium ${typeBadgeColor}`}>\n {field.type}\n </span>\n </label>\n )\n })}\n </div>\n </div>\n\n {/* Filters section */}\n <div>\n <div className=\"mb-1 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('filtersLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n </div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('filtersHelp')}</p>\n\n {filterEntries.length > 0 && (\n <div className=\"space-y-2\">\n {filterEntries.map(([variableName, fieldName], index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={variableName}\n onChange={(event) => handleUpdateFilterVariable(variableName, event.target.value)}\n placeholder={t('variableName')}\n className=\"flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n <span className=\"text-xs text-gray-400\">→</span>\n <select\n value={fieldName}\n onChange={(event) => handleUpdateFilterField(variableName, event.target.value)}\n className=\"flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n >\n <option value=\"\">{t('fieldName')}</option>\n {availableFields.map((field) => (\n <option key={field.name} value={field.name}>\n {field.name}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => handleRemoveFilter(variableName)}\n className=\"rounded-md p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20\"\n >\n <XMarkIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={selectedFields.length === 0}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { GroupNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\nconst GROUP_COLOR_OPTIONS: Array<{ value: GroupNodeConfig['color']; ring: string; fill: string }> = [\n { value: 'indigo', ring: 'ring-indigo-500', fill: 'bg-indigo-500' },\n { value: 'teal', ring: 'ring-teal-500', fill: 'bg-teal-500' },\n { value: 'amber', ring: 'ring-amber-500', fill: 'bg-amber-500' },\n { value: 'rose', ring: 'ring-rose-500', fill: 'bg-rose-500' },\n { value: 'slate', ring: 'ring-slate-500', fill: 'bg-slate-500' },\n]\n\ntype GroupNodeConfigFormProps = {\n config: GroupNodeConfig\n onSave: (config: GroupNodeConfig) => void\n onCancel: () => void\n}\n\nexport function GroupNodeConfigForm({ config, onSave, onCancel }: GroupNodeConfigFormProps) {\n const translations = useTranslations('agents.workflow.groupNodeConfig')\n const [formLabel, setFormLabel] = useState(config.label)\n const [description, setDescription] = useState(config.description ?? '')\n const [color, setColor] = useState<GroupNodeConfig['color']>(config.color)\n\n const handleSave = () => {\n const trimmedLabel = formLabel.trim()\n if (!trimmedLabel) return\n onSave({\n ...config,\n label: trimmedLabel,\n description: description.trim() || undefined,\n color,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={translations('labelField')}\n value={formLabel}\n onValueChange={setFormLabel}\n placeholder={translations('labelPlaceholder')}\n />\n\n <FormTextarea\n label={translations('descriptionField')}\n value={description}\n onValueChange={setDescription}\n placeholder={translations('descriptionPlaceholder')}\n rows={3}\n />\n\n <div>\n <label className=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {translations('colorField')}\n </label>\n <div className=\"flex items-center gap-3\">\n {GROUP_COLOR_OPTIONS.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setColor(option.value)}\n className={`h-8 w-8 rounded-full ${option.fill} transition-all ${\n color === option.value\n ? `ring-2 ${option.ring} ring-offset-2 dark:ring-offset-gray-900`\n : 'opacity-60 hover:opacity-100'\n }`}\n aria-label={option.value}\n />\n ))}\n </div>\n </div>\n\n <ConfigFormActions\n cancelLabel={translations('cancel')}\n saveLabel={translations('save')}\n onCancel={onCancel}\n onSave={handleSave}\n saveDisabled={!formLabel.trim()}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { RuleNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype RuleNodeConfigFormProps = {\n config: RuleNodeConfig\n onSave: (config: RuleNodeConfig) => void\n onCancel: () => void\n /** Optional rule catalog for the org. The parent drawer fetches this\n * from `/rules` and passes it in so authors pick by slug instead of\n * free-typing an id. When omitted, renders a plain text field. */\n availableRules?: { ruleId: string; name?: string }[]\n}\n\nexport function RuleNodeConfigForm({ config, onSave, onCancel, availableRules }: RuleNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.ruleNodeConfig')\n const [ruleId, setRuleId] = useState(config.ruleId ?? '')\n const [priority, setPriority] = useState<number>(config.priority ?? 1)\n const [enabled, setEnabled] = useState<boolean>(config.enabled ?? true)\n\n const handleSave = () => {\n const next: RuleNodeConfig = { ...config, type: 'rule', ruleId: ruleId.trim(), priority, enabled }\n onSave(next)\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('ruleIdLabel', { _: 'Rule' } as never)}</label>\n {availableRules && availableRules.length > 0 ? (\n <select\n value={ruleId}\n onChange={(event) => setRuleId(event.target.value)}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n >\n <option value=\"\">{t('rulePickPrompt', { _: 'Choose a rule…' } as never)}</option>\n {availableRules.map((rule) => (\n <option key={rule.ruleId} value={rule.ruleId}>\n {rule.name ? `${rule.name} (${rule.ruleId})` : rule.ruleId}\n </option>\n ))}\n </select>\n ) : (\n <FormInput\n type=\"text\"\n value={ruleId}\n onValueChange={setRuleId}\n placeholder=\"e.g. peak_hours\"\n />\n )}\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n References an <code>astrlabe.agent_rules.rule_id</code> row in this organization.\n </p>\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <FormInput\n type=\"number\"\n label={t('priorityLabel', { _: 'Priority' } as never)}\n value={String(priority)}\n onValueChange={(value) => setPriority(Number(value) || 0)}\n min={0}\n />\n <label className=\"flex items-end gap-2 pb-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(event) => setEnabled(event.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n {t('enabledLabel', { _: 'Enabled' } as never)}\n </label>\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect, FormTextarea } from '@ui/index'\nimport type { AgentNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype AgentNodeConfigFormProps = {\n config: AgentNodeConfig\n onSave: (config: AgentNodeConfig) => void\n onCancel: () => void\n /** Agent catalog for the org — lets authors pick by name instead of\n * pasting a UUID. Fetched by the parent drawer from `/agents`. */\n availableAgents?: { id: string; name?: string; slug?: string }[]\n /** Bedrock / OpenAI / Anthropic connections already configured in the\n * org. Fetched from `/agents/connections`. */\n availableConnections?: { id: string; name?: string; providerType?: string }[]\n}\n\nexport function AgentNodeConfigForm({\n config,\n onSave,\n onCancel,\n availableAgents,\n availableConnections,\n}: AgentNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.agentNodeConfig')\n const [agentId, setAgentId] = useState(config.agentId ?? '')\n const [connectionId, setConnectionId] = useState(config.connectionId ?? '')\n const [modelId, setModelId] = useState(config.modelId ?? '')\n const [systemPrompt, setSystemPrompt] = useState(config.systemPrompt ?? '')\n const [userPrompt, setUserPrompt] = useState(config.userPrompt ?? '')\n const [maxTokens, setMaxTokens] = useState<number>(config.maxTokens ?? 1024)\n const [temperature, setTemperature] = useState<number>(config.temperature ?? 0.2)\n\n const handleSave = () => {\n const next: AgentNodeConfig = {\n ...config,\n type: 'agent',\n agentId: agentId.trim() || undefined,\n connectionId: connectionId.trim() || undefined,\n modelId: modelId.trim() || undefined,\n systemPrompt: systemPrompt || undefined,\n userPrompt: userPrompt || undefined,\n maxTokens,\n temperature,\n }\n onSave(next)\n }\n\n const agentOptions = (availableAgents ?? []).map((agent) => ({\n value: agent.id,\n label: agent.name ?? agent.slug ?? agent.id,\n }))\n const connOptions = (availableConnections ?? []).map((conn) => ({\n value: conn.id,\n label: conn.providerType ? `${conn.name ?? conn.id} (${conn.providerType})` : (conn.name ?? conn.id),\n }))\n\n return (\n <div className=\"space-y-4\">\n {agentOptions.length > 0 ? (\n <FormSelect\n label={t('agentLabel', { _: 'Agent' } as never)}\n value={agentId}\n onValueChange={setAgentId}\n options={[{ value: '', label: t('agentPickPrompt', { _: 'Choose an agent…' } as never) }, ...agentOptions]}\n />\n ) : (\n <FormInput\n type=\"text\"\n label={t('agentIdLabel', { _: 'Agent ID' } as never)}\n value={agentId}\n onValueChange={setAgentId}\n placeholder=\"UUID of an astrlabe.agents row\"\n />\n )}\n\n {connOptions.length > 0 ? (\n <FormSelect\n label={t('connectionLabel', { _: 'Model provider connection' } as never)}\n value={connectionId}\n onValueChange={setConnectionId}\n options={[{ value: '', label: t('connectionPickPrompt', { _: 'Inline model (no connection)' } as never) }, ...connOptions]}\n />\n ) : (\n <FormInput\n type=\"text\"\n label={t('connectionIdLabel', { _: 'Connection ID' } as never)}\n value={connectionId}\n onValueChange={setConnectionId}\n placeholder=\"UUID of a model_provider_connections row\"\n />\n )}\n\n <FormInput\n type=\"text\"\n label={t('modelIdLabel', { _: 'Model override (optional)' } as never)}\n value={modelId}\n onValueChange={setModelId}\n placeholder=\"amazon.nova-lite-v1:0\"\n />\n\n <FormTextarea\n label={t('systemPromptLabel', { _: 'System prompt' } as never)}\n value={systemPrompt}\n onValueChange={setSystemPrompt}\n placeholder=\"You are a data analyst. Base every sentence on the provided data — no speculation.\"\n rows={4}\n />\n\n <FormTextarea\n label={t('userPromptLabel', { _: 'User prompt' } as never)}\n value={userPrompt}\n onValueChange={setUserPrompt}\n placeholder={'Station profile:\\n{{ ds-station.station }}\\n\\nProduce a ≤120-word briefing…'}\n rows={8}\n />\n\n <div className=\"grid grid-cols-2 gap-3\">\n <FormInput\n type=\"number\"\n label={t('maxTokensLabel', { _: 'Max output tokens' } as never)}\n value={String(maxTokens)}\n onValueChange={(value) => setMaxTokens(Number(value) || 0)}\n min={1}\n max={8192}\n step={32}\n />\n <FormInput\n type=\"number\"\n label={t('temperatureLabel', { _: 'Temperature' } as never)}\n value={String(temperature)}\n onValueChange={(value) => setTemperature(Number(value) || 0)}\n min={0}\n max={2}\n step={0.1}\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { AudioInputNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype AudioInputNodeConfigFormProps = {\n config: AudioInputNodeConfig\n onSave: (config: AudioInputNodeConfig) => void\n onCancel: () => void\n}\n\nconst AUDIO_FORMATS = ['auto', 'mp3', 'wav', 'm4a', 'webm', 'ogg', 'flac', 'mp4', 'mpga'] as const\n\nexport function AudioInputNodeConfigForm({ config, onSave, onCancel }: AudioInputNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.audioInputNodeConfig')\n const [url, setUrl] = useState(config.url ?? '')\n const [format, setFormat] = useState<string>(config.format && config.format.length > 0 ? config.format : 'auto')\n\n const handleSave = () => {\n onSave({\n ...config,\n url,\n format: format === 'auto' ? undefined : format,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('urlLabel')}\n value={url}\n onValueChange={setUrl}\n placeholder={t('urlPlaceholder')}\n />\n\n <FormSelect\n label={t('formatLabel')}\n value={format}\n onValueChange={setFormat}\n options={AUDIO_FORMATS.map((option) => ({ value: option, label: option }))}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect, FormTextarea } from '@ui/index'\nimport type { SpeechTranscriberNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype SpeechTranscriberNodeConfigFormProps = {\n config: SpeechTranscriberNodeConfig\n onSave: (config: SpeechTranscriberNodeConfig) => void\n onCancel: () => void\n}\n\nconst RESPONSE_FORMATS: NonNullable<SpeechTranscriberNodeConfig['responseFormat']>[] = [\n 'verbose_json',\n 'json',\n 'text',\n]\n\nexport function SpeechTranscriberNodeConfigForm({ config, onSave, onCancel }: SpeechTranscriberNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.speechTranscriberNodeConfig')\n const [audioUrl, setAudioUrl] = useState(config.audioUrl ?? '')\n const [model, setModel] = useState(config.model ?? 'whisper-1')\n const [language, setLanguage] = useState(config.language ?? '')\n const [prompt, setPrompt] = useState(config.prompt ?? '')\n const [responseFormat, setResponseFormat] = useState<NonNullable<SpeechTranscriberNodeConfig['responseFormat']>>(\n config.responseFormat ?? 'verbose_json',\n )\n const [endpoint, setEndpoint] = useState(config.endpoint ?? '')\n const [timeoutMs, setTimeoutMs] = useState(config.timeoutMs ?? 120_000)\n\n const handleSave = () => {\n onSave({\n ...config,\n audioUrl,\n model: model.trim() || undefined,\n language: language.trim() || undefined,\n prompt: prompt.trim() || undefined,\n responseFormat,\n endpoint: endpoint.trim() || undefined,\n timeoutMs,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('audioUrlLabel')}\n value={audioUrl}\n onValueChange={setAudioUrl}\n placeholder={t('audioUrlPlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('modelLabel')}\n value={model}\n onValueChange={setModel}\n placeholder=\"whisper-1\"\n />\n\n <FormInput\n type=\"text\"\n label={t('languageLabel')}\n value={language}\n onValueChange={setLanguage}\n placeholder={t('languagePlaceholder')}\n />\n\n <FormTextarea\n label={t('promptLabel')}\n value={prompt}\n onValueChange={setPrompt}\n placeholder={t('promptPlaceholder')}\n rows={3}\n />\n\n <FormSelect\n label={t('responseFormatLabel')}\n value={responseFormat}\n onValueChange={(value) => setResponseFormat(value as typeof responseFormat)}\n options={RESPONSE_FORMATS.map((value) => ({ value, label: value }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('endpointLabel')}\n value={endpoint}\n onValueChange={setEndpoint}\n placeholder={t('endpointPlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n max={600_000}\n step={1000}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { DashboardOutputNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype DashboardOutputNodeConfigFormProps = {\n config: DashboardOutputNodeConfig\n onSave: (config: DashboardOutputNodeConfig) => void\n onCancel: () => void\n}\n\ntype SourceMode = 'reference' | 'inline'\n\nexport function DashboardOutputNodeConfigForm({ config, onSave, onCancel }: DashboardOutputNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.dashboardOutputNodeConfig')\n const initialMode: SourceMode = config.dashboard ? 'inline' : 'reference'\n const [mode, setMode] = useState<SourceMode>(initialMode)\n const [dashboardFrom, setDashboardFrom] = useState<string>(config.dashboardFrom ?? '')\n const [inlineJson, setInlineJson] = useState<string>(\n config.dashboard ? JSON.stringify(config.dashboard, null, 2) : ''\n )\n const [parseError, setParseError] = useState<string | null>(null)\n\n const handleSave = () => {\n if (mode === 'reference') {\n const trimmed = dashboardFrom.trim()\n onSave({ type: 'dashboard_output', dashboardFrom: trimmed })\n return\n }\n try {\n const parsed = inlineJson.trim() ? (JSON.parse(inlineJson) as Record<string, unknown>) : {}\n setParseError(null)\n onSave({ type: 'dashboard_output', dashboard: parsed })\n } catch (error) {\n setParseError(error instanceof Error ? error.message : String(error))\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('description')}</p>\n\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setMode('reference')}\n className={`flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${\n mode === 'reference'\n ? 'border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300'\n : 'border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300'\n }`}\n >\n {t('modeReference')}\n </button>\n <button\n type=\"button\"\n onClick={() => setMode('inline')}\n className={`flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${\n mode === 'inline'\n ? 'border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300'\n : 'border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300'\n }`}\n >\n {t('modeInline')}\n </button>\n </div>\n\n {mode === 'reference' ? (\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {t('referenceLabel')}\n </label>\n <input\n type=\"text\"\n value={dashboardFrom}\n onChange={(event) => setDashboardFrom(event.target.value)}\n placeholder={t('referencePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white\"\n />\n <p className=\"mt-1 text-[10px] text-gray-500 dark:text-gray-400\">{t('referenceHelp')}</p>\n </div>\n ) : (\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {t('inlineLabel')}\n </label>\n <textarea\n value={inlineJson}\n onChange={(event) => setInlineJson(event.target.value)}\n placeholder='{\\n \"kpis\": [],\\n \"charts\": [],\\n \"tables\": []\\n}'\n rows={12}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-xs font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white\"\n />\n {parseError ? (\n <p className=\"mt-1 text-[10px] font-medium text-red-600 dark:text-red-400\">\n {t('parseError')}: {parseError}\n </p>\n ) : (\n <p className=\"mt-1 text-[10px] text-gray-500 dark:text-gray-400\">{t('inlineHelp')}</p>\n )}\n </div>\n )}\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { BeakerIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS, isExperimentalNodeType } from '../../constants/workflow-constants'\nimport { getEntityGradient, getEntityIcon } from '../../constants/entity-colors'\nimport { GlassModal } from '@ui/components/glass-modal'\nimport { useModalStore } from '../../store/modal-store'\nimport { StartNodeConfigForm } from '../config-forms/start-node-config-form'\nimport { EndNodeConfigForm } from '../config-forms/end-node-config-form'\nimport { IfElseNodeConfigForm } from '../config-forms/if-else-node-config-form'\nimport { CodeNodeConfigForm } from '../config-forms/code-node-config-form'\nimport { HttpRequestNodeConfigForm } from '../config-forms/http-request-node-config-form'\nimport { S3WriteNodeConfigForm } from '../config-forms/s3-write-node-config-form'\nimport { TemplateTransformNodeConfigForm } from '../config-forms/template-transform-node-config-form'\nimport { IterationNodeConfigForm } from '../config-forms/iteration-node-config-form'\nimport { KnowledgeBaseNodeConfigForm } from '../config-forms/knowledge-base-node-config-form'\nimport { AnswerNodeConfigForm } from '../config-forms/answer-node-config-form'\nimport { QuestionClassifierNodeConfigForm } from '../config-forms/question-classifier-node-config-form'\nimport { ParameterExtractorNodeConfigForm } from '../config-forms/parameter-extractor-node-config-form'\nimport { VariableAssignerNodeConfigForm } from '../config-forms/variable-assigner-node-config-form'\nimport { VariableAggregatorNodeConfigForm } from '../config-forms/variable-aggregator-node-config-form'\nimport { DocumentExtractorNodeConfigForm } from '../config-forms/document-extractor-node-config-form'\nimport { ListOperatorNodeConfigForm } from '../config-forms/list-operator-node-config-form'\nimport { IterationStartNodeConfigForm } from '../config-forms/iteration-start-node-config-form'\nimport { EntityNodeConfigForm } from '../config-forms/entity-node-config-form'\n// DatasourceNodeConfigForm has its own GlassModal — rendered directly in WorkflowCanvas\nimport { GroupNodeConfigForm } from '../config-forms/group-node-config-form'\nimport { RuleNodeConfigForm } from '../config-forms/rule-node-config-form'\nimport { AgentNodeConfigForm } from '../config-forms/agent-node-config-form'\nimport { AudioInputNodeConfigForm } from '../config-forms/audio-input-node-config-form'\nimport { SpeechTranscriberNodeConfigForm } from '../config-forms/speech-transcriber-node-config-form'\nimport { DashboardOutputNodeConfigForm } from '../config-forms/dashboard-output-node-config-form'\nimport type {\n LogicNodeConfig,\n StartNodeConfig,\n EndNodeConfig,\n IfElseNodeConfig,\n CodeNodeConfig,\n HttpRequestNodeConfig,\n S3WriteNodeConfig,\n TemplateTransformNodeConfig,\n IterationNodeConfig,\n KnowledgeBaseNodeConfig,\n AnswerNodeConfig,\n QuestionClassifierNodeConfig,\n ParameterExtractorNodeConfig,\n VariableAssignerNodeConfig,\n VariableAggregatorNodeConfig,\n DocumentExtractorNodeConfig,\n ListOperatorNodeConfig,\n IterationStartNodeConfig,\n EntityNodeConfig,\n DatasourceNodeConfig,\n GroupNodeConfig,\n ModelProviderNodeConfig,\n RuleNodeConfig,\n AgentNodeConfig,\n AudioInputNodeConfig,\n SpeechTranscriberNodeConfig,\n DashboardOutputNodeConfig,\n} from '../../contracts'\nimport type { WorkflowEntityDefinition } from '../../types'\n\nconst NODE_TITLE_KEYS: Record<string, string> = {\n start: 'startNodeConfig',\n end: 'endNodeConfig',\n if_else: 'ifElseNodeConfig',\n code: 'codeNodeConfig',\n http_request: 'httpRequestNodeConfig',\n s3_write: 's3WriteNodeConfig',\n template_transform: 'templateTransformNodeConfig',\n iteration: 'iterationNodeConfig',\n knowledge_base: 'knowledgeBaseNodeConfig',\n answer: 'answerNodeConfig',\n question_classifier: 'questionClassifierNodeConfig',\n parameter_extractor: 'parameterExtractorNodeConfig',\n variable_assigner: 'variableAssignerNodeConfig',\n variable_aggregator: 'variableAggregatorNodeConfig',\n document_extractor: 'documentExtractorNodeConfig',\n list_operator: 'listOperatorNodeConfig',\n iteration_start: 'iterationStartNodeConfig',\n entity: 'entityNodeConfig',\n datasource: 'datasourceNodeConfig',\n group: 'groupNodeConfig',\n rule: 'ruleNodeConfig',\n agent: 'agentNodeConfig',\n audio_input: 'audioInputNodeConfig',\n speech_transcriber: 'speechTranscriberNodeConfig',\n dashboard_output: 'dashboardOutputNodeConfig',\n}\n\ntype DatasourceDefinition = {\n id: string\n name: string\n dialect: string\n}\n\ntype LogicNodeModalProps = {\n onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void\n entities?: WorkflowEntityDefinition[]\n datasources?: DatasourceDefinition[]\n onLoadTables?: (datasourceId: string) => Promise<string[]>\n onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{ name: string; type: string; nullable?: boolean }>>\n}\n\nexport function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables, onLoadSchema }: LogicNodeModalProps) {\n const t = useTranslations('agents.workflow')\n\n const activeModal = useModalStore((s) => s.activeModal)\n const logicNodeData = useModalStore((s) => s.logicNodeData)\n const closeModal = useModalStore((s) => s.closeModal)\n\n const open = activeModal === 'logic-node'\n const nodeId = logicNodeData?.nodeId ?? null\n const nodeLabel = logicNodeData?.nodeLabel ?? ''\n const config = logicNodeData?.config ?? null\n\n if (!config || !nodeId) return null\n\n const entityMasterId = config.type === 'entity' ? (config as EntityNodeConfig).entityMasterId : undefined\n const IconComponent = entityMasterId ? getEntityIcon(entityMasterId) : LOGIC_ICON_MAP[config.type]\n const gradient = entityMasterId ? getEntityGradient(entityMasterId) : (LOGIC_NODE_GRADIENTS[config.type] ?? 'from-gray-400 to-gray-500')\n const titleKey = NODE_TITLE_KEYS[config.type]\n const title = titleKey ? t(`${titleKey}.title`) : nodeLabel\n\n const handleSave = (updatedConfig: LogicNodeConfig) => {\n onSave(nodeId, updatedConfig)\n }\n\n const renderForm = () => {\n switch (config.type) {\n case 'start':\n return <StartNodeConfigForm config={config as StartNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'end':\n return <EndNodeConfigForm config={config as EndNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'if_else':\n return <IfElseNodeConfigForm config={config as IfElseNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'code':\n return <CodeNodeConfigForm config={config as CodeNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'http_request':\n return <HttpRequestNodeConfigForm config={config as HttpRequestNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 's3_write':\n return <S3WriteNodeConfigForm config={config as S3WriteNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'template_transform':\n return <TemplateTransformNodeConfigForm config={config as TemplateTransformNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'iteration':\n return <IterationNodeConfigForm config={config as IterationNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'knowledge_base':\n return <KnowledgeBaseNodeConfigForm config={config as KnowledgeBaseNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'answer':\n return <AnswerNodeConfigForm config={config as AnswerNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'question_classifier':\n return <QuestionClassifierNodeConfigForm config={config as QuestionClassifierNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'parameter_extractor':\n return <ParameterExtractorNodeConfigForm config={config as ParameterExtractorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'variable_assigner':\n return <VariableAssignerNodeConfigForm config={config as VariableAssignerNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'variable_aggregator':\n return <VariableAggregatorNodeConfigForm config={config as VariableAggregatorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'document_extractor':\n return <DocumentExtractorNodeConfigForm config={config as DocumentExtractorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'list_operator':\n return <ListOperatorNodeConfigForm config={config as ListOperatorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'iteration_start':\n return <IterationStartNodeConfigForm config={config as IterationStartNodeConfig} onSave={handleSave} onCancel={closeModal} />\n // datasource — handled by standalone DatasourceNodeConfigForm in WorkflowCanvas\n case 'entity':\n return <EntityNodeConfigForm config={config as EntityNodeConfig} entities={entities} onSave={handleSave} onCancel={closeModal} />\n case 'group':\n return <GroupNodeConfigForm config={config as GroupNodeConfig} onSave={handleSave} onCancel={closeModal} />\n // model_provider was removed from the canvas — providers are\n // now account-level credentials configured in Settings, not\n // draggable nodes. Any legacy graph that still has a\n // model_provider node falls through to default → no edit form.\n case 'rule':\n return <RuleNodeConfigForm config={config as RuleNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'agent':\n return <AgentNodeConfigForm config={config as AgentNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'audio_input':\n return <AudioInputNodeConfigForm config={config as AudioInputNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'speech_transcriber':\n return <SpeechTranscriberNodeConfigForm config={config as SpeechTranscriberNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'dashboard_output':\n return <DashboardOutputNodeConfigForm config={config as DashboardOutputNodeConfig} onSave={handleSave} onCancel={closeModal} />\n default:\n return null\n }\n }\n\n const isExperimental = isExperimentalNodeType(config.type)\n\n return (\n <GlassModal\n open={open}\n onClose={closeModal}\n title={title}\n subtitle={nodeLabel}\n label={t('nodeConfig')}\n icon={IconComponent ? <IconComponent className=\"h-5 w-5 text-white\" /> : undefined}\n gradient={gradient}\n maxWidth=\"2xl\"\n >\n {isExperimental && (\n <div className=\"mb-4 flex items-start gap-2 rounded-lg border border-amber-300/40 bg-amber-50/70 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-100\">\n <BeakerIcon className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-600 dark:text-amber-300\" aria-hidden=\"true\" />\n <div className=\"space-y-1\">\n <div className=\"font-semibold\">\n {t('experimentalNode', { _: 'Experimental node' } as never)}\n </div>\n <div className=\"text-amber-800/90 dark:text-amber-100/80\">\n {t('experimentalNodeWarning', {\n _: 'This node\\'s executor is a stub today. The configuration is saved, but the node may pass through inputs unchanged at run-time until the executor lands.',\n } as never)}\n </div>\n </div>\n </div>\n )}\n {renderForm()}\n </GlassModal>\n )\n}\n","/**\n * Node Context Menu\n * =================\n * Floating right-click menu for a single workflow node.\n * Provides edit, duplicate, copy, and delete actions.\n * Positioned absolutely at mouse coordinates and closes\n * on outside click or Escape key.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n PencilIcon,\n DocumentDuplicateIcon,\n ClipboardDocumentIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\n\ntype NodeContextMenuProps = {\n position: { x: number; y: number }\n targetId: string\n onClose: () => void\n onEdit: (nodeId: string) => void\n onDuplicate: (nodeId: string) => void\n onCopy: (nodeId: string) => void\n onDelete: (nodeId: string) => void\n}\n\nexport function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onCopy, onDelete }: NodeContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n\n const entries: ContextMenuEntry[] = [\n {\n key: 'edit',\n label: translations('edit'),\n icon: PencilIcon,\n onClick: () => { onEdit(targetId); onClose() },\n testId: 'context-menu-edit',\n },\n {\n key: 'duplicate',\n label: translations('duplicate'),\n icon: DocumentDuplicateIcon,\n onClick: () => { onDuplicate(targetId); onClose() },\n testId: 'context-menu-duplicate',\n },\n {\n key: 'copy',\n label: translations('copy'),\n icon: ClipboardDocumentIcon,\n onClick: () => { onCopy(targetId); onClose() },\n testId: 'context-menu-copy',\n },\n {\n key: 'delete',\n label: translations('delete'),\n icon: TrashIcon,\n onClick: () => { onDelete(targetId); onClose() },\n danger: true,\n testId: 'context-menu-delete',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[180px]\"\n testId=\"node-context-menu\"\n />\n )\n}\n","/**\n * Panel Context Menu\n * ==================\n * Floating right-click menu for the empty canvas area.\n * Provides paste, select all, fit view, and add note actions.\n * Positioned at mouse coordinates, uses flow-space position\n * for placing new nodes.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n ClipboardIcon,\n CursorArrowRaysIcon,\n ArrowsPointingOutIcon,\n PencilSquareIcon,\n} from '@heroicons/react/24/outline'\n\ntype PanelContextMenuProps = {\n position: { x: number; y: number }\n onClose: () => void\n onPaste: () => void\n onSelectAll: () => void\n onFitView: () => void\n onAddNote: (flowPosition: { x: number; y: number }) => void\n flowPosition: { x: number; y: number }\n hasClipboardContent: boolean\n}\n\nexport function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView, onAddNote, flowPosition, hasClipboardContent }: PanelContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n\n const entries: ContextMenuEntry[] = [\n {\n key: 'paste',\n label: translations('paste'),\n icon: ClipboardIcon,\n onClick: () => { onPaste(); onClose() },\n disabled: !hasClipboardContent,\n testId: 'context-menu-paste',\n },\n {\n key: 'select-all',\n label: translations('selectAll'),\n icon: CursorArrowRaysIcon,\n onClick: () => { onSelectAll(); onClose() },\n testId: 'context-menu-select-all',\n },\n {\n key: 'fit-view',\n label: translations('fitView'),\n icon: ArrowsPointingOutIcon,\n onClick: () => { onFitView(); onClose() },\n testId: 'context-menu-fit-view',\n },\n { type: 'divider', key: 'divider-main' },\n {\n key: 'add-note',\n label: translations('addNote'),\n icon: PencilSquareIcon,\n onClick: () => { onAddNote(flowPosition); onClose() },\n testId: 'context-menu-add-note',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[180px]\"\n testId=\"panel-context-menu\"\n />\n )\n}\n","/**\n * Selection Context Menu\n * ======================\n * Floating right-click menu for multiple selected nodes.\n * Provides copy, duplicate, delete, alignment, and distribution actions.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n ClipboardDocumentIcon,\n DocumentDuplicateIcon,\n TrashIcon,\n RectangleGroupIcon,\n} from '@heroicons/react/24/outline'\nimport type { Node } from '@xyflow/react'\n\ntype AlignDirection = 'left' | 'right' | 'top' | 'bottom' | 'centerHorizontal' | 'centerVertical'\ntype DistributeDirection = 'horizontal' | 'vertical'\n\ntype SelectionContextMenuProps = {\n position: { x: number; y: number }\n onClose: () => void\n onCopy: () => void\n onDuplicate: () => void\n onDelete: () => void\n onGroupSelected: () => void\n onAlign: (direction: AlignDirection) => void\n onDistribute: (direction: DistributeDirection) => void\n}\n\nexport type { AlignDirection, DistributeDirection }\n\nexport function SelectionContextMenu({\n position,\n onClose,\n onCopy,\n onDuplicate,\n onDelete,\n onGroupSelected,\n onAlign,\n onDistribute,\n}: SelectionContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n const entries: ContextMenuEntry[] = [\n {\n key: 'copy',\n label: translations('copy'),\n icon: ClipboardDocumentIcon,\n onClick: () => { onCopy(); onClose() },\n testId: 'context-menu-copy',\n },\n {\n key: 'duplicate',\n label: translations('duplicate'),\n icon: DocumentDuplicateIcon,\n onClick: () => { onDuplicate(); onClose() },\n testId: 'context-menu-duplicate',\n },\n {\n key: 'group-selected',\n label: translations('groupSelected'),\n icon: RectangleGroupIcon,\n onClick: () => { onGroupSelected(); onClose() },\n testId: 'context-menu-group-selected',\n },\n {\n key: 'delete',\n label: translations('delete'),\n icon: TrashIcon,\n onClick: () => { onDelete(); onClose() },\n danger: true,\n testId: 'context-menu-delete',\n },\n { type: 'divider', key: 'divider-main' },\n {\n key: 'align-left',\n label: translations('alignLeft'),\n icon: AlignLeftIcon,\n onClick: () => { onAlign('left'); onClose() },\n testId: 'context-menu-align-left',\n },\n {\n key: 'align-right',\n label: translations('alignRight'),\n icon: AlignRightIcon,\n onClick: () => { onAlign('right'); onClose() },\n testId: 'context-menu-align-right',\n },\n {\n key: 'align-top',\n label: translations('alignTop'),\n icon: AlignTopIcon,\n onClick: () => { onAlign('top'); onClose() },\n testId: 'context-menu-align-top',\n },\n {\n key: 'align-bottom',\n label: translations('alignBottom'),\n icon: AlignBottomIcon,\n onClick: () => { onAlign('bottom'); onClose() },\n testId: 'context-menu-align-bottom',\n },\n {\n key: 'center-horizontally',\n label: translations('centerHorizontally'),\n icon: CenterHorizontalIcon,\n onClick: () => { onAlign('centerHorizontal'); onClose() },\n testId: 'context-menu-center-horizontally',\n },\n {\n key: 'center-vertically',\n label: translations('centerVertically'),\n icon: CenterVerticalIcon,\n onClick: () => { onAlign('centerVertical'); onClose() },\n testId: 'context-menu-center-vertically',\n },\n { type: 'divider', key: 'divider-distribute' },\n {\n key: 'distribute-horizontally',\n label: translations('distributeHorizontally'),\n icon: DistributeHorizontalIcon,\n onClick: () => { onDistribute('horizontal'); onClose() },\n testId: 'context-menu-distribute-horizontally',\n },\n {\n key: 'distribute-vertically',\n label: translations('distributeVertically'),\n icon: DistributeVerticalIcon,\n onClick: () => { onDistribute('vertical'); onClose() },\n testId: 'context-menu-distribute-vertically',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[220px]\"\n testId=\"selection-context-menu\"\n />\n )\n}\n\n// ============================================================================\n// Helper: get node dimensions\n// ============================================================================\n\nconst DEFAULT_NODE_WIDTH = 200\nconst DEFAULT_NODE_HEIGHT = 60\n\nexport function getNodeDimensions(node: Node): { width: number; height: number } {\n return {\n width: (node.measured?.width ?? node.width ?? DEFAULT_NODE_WIDTH) as number,\n height: (node.measured?.height ?? node.height ?? DEFAULT_NODE_HEIGHT) as number,\n }\n}\n\n// ============================================================================\n// Lightweight SVG alignment icons (no external dependency needed)\n// ============================================================================\n\nfunction AlignLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"4\" x2=\"4\" y2=\"20\" />\n <rect x=\"7\" y=\"6\" width=\"10\" height=\"4\" rx=\"1\" />\n <rect x=\"7\" y=\"14\" width=\"6\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"20\" />\n <rect x=\"7\" y=\"6\" width=\"10\" height=\"4\" rx=\"1\" />\n <rect x=\"11\" y=\"14\" width=\"6\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignTopIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"4\" x2=\"20\" y2=\"4\" />\n <rect x=\"6\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n <rect x=\"14\" y=\"7\" width=\"4\" height=\"6\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignBottomIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"20\" />\n <rect x=\"6\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n <rect x=\"14\" y=\"11\" width=\"4\" height=\"6\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction CenterHorizontalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\" strokeDasharray=\"2 2\" />\n <rect x=\"5\" y=\"6\" width=\"14\" height=\"4\" rx=\"1\" />\n <rect x=\"7\" y=\"14\" width=\"10\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction CenterVerticalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" strokeDasharray=\"2 2\" />\n <rect x=\"6\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n <rect x=\"14\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction DistributeHorizontalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"3\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n <rect x=\"10\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n <rect x=\"17\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction DistributeVerticalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"8\" y=\"3\" width=\"8\" height=\"4\" rx=\"1\" />\n <rect x=\"8\" y=\"10\" width=\"8\" height=\"4\" rx=\"1\" />\n <rect x=\"8\" y=\"17\" width=\"8\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n","/**\n * WorkflowCanvas (Main Interactive Canvas)\n * =========================================\n * Dify-inspired drawable workflow canvas.\n * Users drop nodes from the sidebar palette, connect them with edges,\n * and the graph is saved as JSON (WorkflowGraph) to PostgreSQL.\n *\n * Key features:\n * - Drag & drop from NodePalette sidebar\n * - Draw edges between nodes with connection validation\n * - Auto-save draft (debounced 2s)\n * - Load/restore from saved WorkflowGraph\n * - MiniMap with node type coloring\n * - Snap to grid (20px)\n * - Conditional edge labels (True/False for If/Else branches)\n * - Undo/Redo via Zustand store\n * - Copy/Paste nodes via Zustand store\n * - Custom animated connection line while dragging\n * - Render props for external modals (AgentModal, LogicNodeModal)\n */\n\nimport { lazy, useState, useCallback, useEffect, useRef, useMemo } from 'react'\nimport {\n useNodesState,\n useEdgesState,\n useReactFlow,\n ReactFlowProvider,\n addEdge,\n BackgroundVariant,\n MarkerType,\n Position,\n type Node,\n type Edge,\n type Connection,\n type NodeTypes,\n} from '@xyflow/react'\nimport '@xyflow/react/dist/style.css'\nimport { useTranslations } from '@ui/lib/i18n-context'\n\nimport { useWorkflowStore } from '../../store/workflow-store'\nimport { useModalStore } from '../../store/modal-store'\nimport { ConditionalEdge } from './conditional-edge'\nimport { CustomConnectionLine } from './custom-connection-line'\nimport { DraggableCommandBar } from './draggable-command-bar'\nimport { GRAPH_ACTIVE_EDGE_COLOR, GRAPH_TRUE_EDGE_COLOR, GRAPH_FALSE_EDGE_COLOR, MINIMAP_NODE_COLORS } from '../../constants/workflow-constants'\nimport { getEntityMinimapColor } from '../../constants/entity-colors'\nimport { createDefaultLogicNodeConfig } from '../../utils/logic-node-defaults'\nimport { DatasourceNodeConfigForm } from '../config-forms/datasource-node-config-form'\nimport { applyDagreLayout, type LayoutDirection } from '../../utils/layout-engine'\nimport type {\n AgentWithPrompts,\n WorkflowCardDisplayMode,\n AgentNodeData,\n ToolCanvasData,\n RuleNodeData,\n EntityNodeData,\n DatasourceNodeData,\n GroupNodeData,\n VariableAggregatorNodeData,\n WorkflowEntityDefinition,\n} from '../../types'\nimport type {\n AgentModel,\n AgentTool,\n WorkflowTool,\n AgentRule,\n WorkflowGraph,\n WorkflowNodeType,\n WorkflowNodeData,\n LogicNodeConfig,\n EntityNodeConfig,\n DatasourceNodeConfig,\n RuleNodeConfig,\n GroupNodeConfig,\n} from '../../contracts'\n\n// Node components\nimport { AgentFlowNode } from '../nodes/agent-flow-node'\nimport { AgentToolFlowNode } from '../nodes/agent-tool-flow-node'\nimport { ToolFlowNode } from '../nodes/tool-flow-node'\nimport { RuleFlowNode } from '../nodes/rule-flow-node'\nimport { EntityFlowNode } from '../nodes/entity-flow-node'\nimport { StartFlowNode } from '../nodes/start-flow-node'\nimport { EndFlowNode } from '../nodes/end-flow-node'\nimport { IfElseFlowNode } from '../nodes/if-else-flow-node'\nimport { CodeFlowNode } from '../nodes/code-flow-node'\nimport { HttpRequestFlowNode } from '../nodes/http-request-flow-node'\nimport { TemplateTransformFlowNode } from '../nodes/template-transform-flow-node'\nimport { IterationFlowNode } from '../nodes/iteration-flow-node'\nimport { KnowledgeBaseFlowNode } from '../nodes/knowledge-base-flow-node'\nimport { AnswerFlowNode } from '../nodes/answer-flow-node'\nimport { QuestionClassifierFlowNode } from '../nodes/question-classifier-flow-node'\nimport { ParameterExtractorFlowNode } from '../nodes/parameter-extractor-flow-node'\nimport { VariableAssignerFlowNode } from '../nodes/variable-assigner-flow-node'\nimport { VariableAggregatorFlowNode } from '../nodes/variable-aggregator-flow-node'\nimport { DocumentExtractorFlowNode } from '../nodes/document-extractor-flow-node'\nimport { ListOperatorFlowNode } from '../nodes/list-operator-flow-node'\nimport { IterationStartFlowNode } from '../nodes/iteration-start-flow-node'\nimport { NoteFlowNode } from '../nodes/note-flow-node'\nimport { DatasourceFlowNode } from '../nodes/datasource-flow-node'\nimport { GroupFlowNode } from '../nodes/group-flow-node'\nimport { AudioInputFlowNode } from '../nodes/audio-input-flow-node'\nimport { SpeechTranscriberFlowNode } from '../nodes/speech-transcriber-flow-node'\nimport { DashboardOutputFlowNode } from '../nodes/dashboard-output-flow-node'\nimport { LogicNodeModal } from '../modals/logic-node-modal'\nimport { NodeContextMenu } from '../context-menus/node-context-menu'\nimport { PanelContextMenu } from '../context-menus/panel-context-menu'\nimport { SelectionContextMenu, getNodeDimensions } from '../context-menus/selection-context-menu'\nimport type { AlignDirection, DistributeDirection } from '../context-menus/selection-context-menu'\n\n// ============================================================================\n// Lazy imports for React Flow sub-components (code-split)\n// ============================================================================\n\nconst ReactFlow = lazy(() => import('@xyflow/react').then((module) => ({ default: module.ReactFlow })))\nconst Background = lazy(() => import('@xyflow/react').then((module) => ({ default: module.Background })))\nconst MiniMap = lazy(() => import('@xyflow/react').then((module) => ({ default: module.MiniMap })))\n\n// ============================================================================\n// Built-in node type registry (all 20 node types)\n// ============================================================================\n\nconst BUILT_IN_NODE_TYPES: NodeTypes = {\n agent: AgentFlowNode,\n agent_tool: AgentToolFlowNode,\n tool: ToolFlowNode,\n rule: RuleFlowNode,\n entity: EntityFlowNode,\n start: StartFlowNode,\n end: EndFlowNode,\n if_else: IfElseFlowNode,\n code: CodeFlowNode,\n http_request: HttpRequestFlowNode,\n template_transform: TemplateTransformFlowNode,\n iteration: IterationFlowNode,\n knowledge_base: KnowledgeBaseFlowNode,\n answer: AnswerFlowNode,\n question_classifier: QuestionClassifierFlowNode,\n parameter_extractor: ParameterExtractorFlowNode,\n variable_assigner: VariableAssignerFlowNode,\n variable_aggregator: VariableAggregatorFlowNode,\n document_extractor: DocumentExtractorFlowNode,\n list_operator: ListOperatorFlowNode,\n iteration_start: IterationStartFlowNode,\n note: NoteFlowNode,\n datasource: DatasourceFlowNode,\n // model_provider removed from canvas — providers are now\n // account-level credentials (configured in Settings), not draggable\n // nodes. Agents reference the provider via the `Models` tab in the\n // agent modal. See agent-modal.tsx + n8n/Dify patterns.\n group: GroupFlowNode,\n audio_input: AudioInputFlowNode,\n speech_transcriber: SpeechTranscriberFlowNode,\n dashboard_output: DashboardOutputFlowNode,\n}\n\n// ============================================================================\n// All 20 node types recognized by the canvas\n// ============================================================================\n\nconst ALL_LOGIC_NODE_TYPES: WorkflowNodeType[] = [\n 'start', 'end', 'if_else', 'code', 'http_request',\n 'template_transform', 'iteration', 'knowledge_base',\n 'answer', 'question_classifier', 'parameter_extractor',\n 'variable_assigner', 'variable_aggregator',\n 'document_extractor', 'list_operator',\n 'iteration_start', 'note',\n 'agent', 'tool', 'rule', 'entity', 'datasource', 'group',\n 'audio_input', 'speech_transcriber',\n 'dashboard_output',\n]\n\nfunction isLogicNodeType(nodeType: string): nodeType is WorkflowNodeType {\n return ALL_LOGIC_NODE_TYPES.includes(nodeType as WorkflowNodeType)\n}\n\n// ============================================================================\n// Edge config constants\n// ============================================================================\n\nconst DEFAULT_EDGE_OPTIONS = {\n type: 'smoothstep' as const,\n animated: true,\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n}\n\nconst SNAP_GRID: [number, number] = [20, 20]\n\nconst MINIMAP_DEFAULT_COLOR = '#94a3b8'\n\nfunction getMinimapNodeColor(node: Node): string {\n if (node.type === 'entity') {\n const entityMasterId = (node.data as EntityNodeData | undefined)?.config?.entityMasterId\n return getEntityMinimapColor(entityMasterId)\n }\n return MINIMAP_NODE_COLORS[node.type ?? 'agent'] ?? MINIMAP_DEFAULT_COLOR\n}\n\nconst AUTO_SAVE_DEBOUNCE_MS = 2000\n\n// ============================================================================\n// Render-prop types for external modals\n// ============================================================================\n\ntype AgentModalRenderProps = {\n agent: AgentWithPrompts | null\n models: AgentModel[]\n open: boolean\n isCreateMode: boolean\n onClose: () => void\n onSaved: () => void\n}\n\ntype LogicNodeModalRenderProps = {\n nodeId: string | null\n nodeLabel: string\n config: LogicNodeConfig | null\n open: boolean\n onClose: () => void\n onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void\n entities: WorkflowEntityDefinition[]\n}\n\n// ============================================================================\n// Props\n// ============================================================================\n\ntype WorkflowCanvasProps = {\n agents: AgentWithPrompts[]\n models: AgentModel[]\n /** Configured LLM provider connections (account-level credentials).\n * Forwarded to AgentModal so the agent's \"Model\" tab can list the\n * providers/credentials available to bind to. Optional — empty\n * means no provider has been configured yet (modal shows empty\n * state pointing the user to Settings). */\n modelProviders?: import('../panels/node-palette').ModelProvider[]\n tools?: WorkflowTool[]\n agentTools?: AgentTool[]\n rules?: AgentRule[]\n entities?: WorkflowEntityDefinition[]\n datasources?: Array<{ id: string; name: string; dialect: string }>\n onLoadTables?: (datasourceId: string) => Promise<string[]>\n onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{ name: string; type: string; nullable?: boolean }>>\n initialGraph?: WorkflowGraph | null\n onGraphChange?: (graph: WorkflowGraph) => void\n onEditTool?: (tool: WorkflowTool) => void\n onToggleTool?: (tool: WorkflowTool) => void\n onEditRule?: (rule: AgentRule) => void\n onToggleRule?: (rule: AgentRule) => void\n onCancelCreateAgent?: () => void\n onAgentSaved?: () => void\n isCreatingAgent?: boolean\n /** Custom node type components — merged with built-in edge types */\n nodeTypes?: NodeTypes\n /** Optional: render the AgentModal externally (frontend provides the component) */\n renderAgentModal?: (props: AgentModalRenderProps) => React.ReactNode\n /** Optional: render a custom LogicNodeModal; defaults to internal modal */\n renderLogicNodeModal?: (props: LogicNodeModalRenderProps) => React.ReactNode\n}\n\n// ============================================================================\n// Inner component (requires ReactFlowProvider ancestor)\n// ============================================================================\n\nfunction WorkflowCanvasInner({\n agents,\n models,\n modelProviders = [],\n tools,\n agentTools = [],\n rules,\n entities = [],\n datasources = [],\n onLoadTables,\n onLoadSchema,\n initialGraph,\n onGraphChange,\n onEditTool,\n onToggleTool,\n onEditRule,\n onToggleRule,\n onCancelCreateAgent,\n onAgentSaved,\n isCreatingAgent = false,\n nodeTypes: externalNodeTypes,\n renderAgentModal,\n renderLogicNodeModal: _renderLogicNodeModal,\n}: WorkflowCanvasProps) {\n const { screenToFlowPosition, getNode, toObject, fitView, zoomIn, zoomOut, zoomTo } = useReactFlow()\n const tWorkflow = useTranslations('agents.workflow')\n const sortedAgents = useMemo(() => [...agents].sort((agentA, agentB) => (agentA.order ?? 0) - (agentB.order ?? 0)), [agents])\n const [selectedAgentId, setSelectedAgentId] = useState<string | null>(null)\n const openAgentModalAction = useModalStore((s) => s.openAgentModal)\n const openLogicNodeModalAction = useModalStore((s) => s.openLogicNodeModal)\n const closeModalAction = useModalStore((s) => s.closeModal)\n const activeModal = useModalStore((s) => s.activeModal)\n const modalOpen = activeModal === 'agent'\n\n // Open agent modal when parent sets isCreatingAgent\n useEffect(() => {\n if (isCreatingAgent) {\n openAgentModalAction(\n { agentId: '', name: '', order: 0, enabled: true, temperature: 0.7, maxTokens: 4096 } as AgentWithPrompts,\n models,\n true,\n agentTools,\n modelProviders,\n )\n }\n }, [isCreatingAgent])\n const graphChangeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Ref-based edge insert handler (avoids circular deps with useCallback)\n const insertNodeOnEdgeRef = useRef<(edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => void>(() => {})\n\n // Ref-based group expand toggle (avoids circular deps — handler needs setNodes/setEdges which are declared later)\n const toggleGroupExpandRef = useRef<(nodeId: string) => void>(() => {})\n\n const handleToggleGroupExpand = useCallback(\n (nodeId: string) => { toggleGroupExpandRef.current(nodeId) },\n []\n )\n\n // Stable callback that reads from the ref — safe to pass into edge data\n const insertNodeOnEdge = useCallback(\n (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => {\n insertNodeOnEdgeRef.current(edgeId, nodeType, position)\n },\n []\n )\n\n const allTools = tools ?? []\n const allRules = rules ?? []\n const allEntities = entities\n\n // Zustand store actions (raw)\n const storeUndoRaw = useWorkflowStore((state) => state.undo)\n const storeRedoRaw = useWorkflowStore((state) => state.redo)\n const storeCopy = useWorkflowStore((state) => state.copy)\n const storePasteRaw = useWorkflowStore((state) => state.paste)\n const storeTakeSnapshot = useWorkflowStore((state) => state.takeSnapshot)\n const canUndo = useWorkflowStore((state) => state.past.length > 0)\n const canRedo = useWorkflowStore((state) => state.future.length > 0)\n\n // Canvas control mode (pointer vs hand)\n const controlMode = useWorkflowStore((state) => state.controlMode)\n const setControlMode = useWorkflowStore((state) => state.setControlMode)\n\n // UI toggles (zustand store)\n const showMinimap = useWorkflowStore((s) => s.showMinimap)\n const showDots = useWorkflowStore((s) => s.showDots)\n const showShortcuts = useWorkflowStore((s) => s.showShortcuts)\n const cardDisplayMode = useWorkflowStore((s) => s.cardDisplayMode)\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const toggleMinimap = useWorkflowStore((s) => s.toggleMinimap)\n const toggleDots = useWorkflowStore((s) => s.toggleDots)\n const toggleShortcuts = useWorkflowStore((s) => s.toggleShortcuts)\n const closeShortcuts = useWorkflowStore((s) => s.closeShortcuts)\n const toggleCardDisplayMode = useWorkflowStore((s) => s.toggleCardDisplayMode)\n const setLayoutDirection = useWorkflowStore((s) => s.setLayoutDirection)\n\n // Logic node editing state\n const [editingLogicNodeId, setEditingLogicNodeId] = useState<string | null>(null)\n\n const handleEditLogicNode = useCallback((nodeId: string) => {\n setEditingLogicNodeId(nodeId)\n const node = getNode(nodeId)\n if (!node) return\n const nodeData = node.data as Record<string, unknown>\n const config = nodeData.config as LogicNodeConfig | undefined\n if (!config) return\n // Datasource nodes use their own GlassModal — skip the generic LogicNodeModal store\n if (config.type === 'datasource') return\n openLogicNodeModalAction(nodeId, (nodeData.label as string) ?? '', config)\n }, [getNode, openLogicNodeModalAction])\n\n // Build lookup maps for entity data enrichment on drop\n const agentMap = useMemo(() => {\n const map = new Map<string, AgentWithPrompts>()\n for (const agent of agents) {\n map.set(agent.agentId, agent)\n }\n return map\n }, [agents])\n\n const toolMap = useMemo(() => {\n const map = new Map<string, WorkflowTool>()\n for (const tool of allTools) {\n map.set(tool.toolId, tool)\n }\n return map\n }, [allTools])\n\n const agentToolMap = useMemo(() => {\n const map = new Map<string, AgentTool>()\n for (const at of agentTools) {\n map.set(at.agentToolId, at)\n }\n return map\n }, [agentTools])\n\n const ruleMap = useMemo(() => {\n const map = new Map<string, AgentRule>()\n for (const rule of allRules) {\n map.set(rule.ruleId, rule)\n }\n return map\n }, [allRules])\n\n const entityMap = useMemo(() => {\n const map = new Map<string, WorkflowEntityDefinition>()\n for (const entity of allEntities) {\n map.set(entity.id, entity)\n }\n return map\n }, [allEntities])\n\n const selectedAgent = useMemo(\n () => sortedAgents.find((agent) => (agent.id || agent.agentId) === selectedAgentId) ?? null,\n [sortedAgents, selectedAgentId]\n )\n\n // Merge built-in + external node types (external overrides built-in)\n const mergedNodeTypes = useMemo<NodeTypes>(\n () => (externalNodeTypes ? { ...BUILT_IN_NODE_TYPES, ...externalNodeTypes } : BUILT_IN_NODE_TYPES),\n [externalNodeTypes]\n )\n\n // Merge edge types\n const edgeTypes = useMemo(() => ({\n default: ConditionalEdge,\n }), [])\n\n // ==========================================================================\n // Build initial nodes from saved graph or from DB entities\n // ==========================================================================\n\n const handleRemoveNodeFromCanvas = useCallback(\n (nodeId: string) => {\n setNodes((currentNodes) => {\n // When removing a group, un-parent its children (make them top-level)\n const removedNode = currentNodes.find((node) => node.id === nodeId)\n const isGroup = removedNode?.type === 'group'\n return currentNodes\n .filter((node) => node.id !== nodeId)\n .map((node) => {\n if (isGroup && node.parentId === nodeId) {\n // Convert child to top-level: make position absolute\n const parentPosition = removedNode?.position ?? { x: 0, y: 0 }\n return {\n ...node,\n parentId: undefined,\n extent: undefined,\n position: {\n x: node.position.x + parentPosition.x,\n y: node.position.y + parentPosition.y,\n },\n }\n }\n return node\n })\n })\n setEdges((currentEdges) =>\n currentEdges.filter((edge) => edge.source !== nodeId && edge.target !== nodeId)\n )\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n const buildInitialNodes = useCallback((): Node[] => {\n if (initialGraph && initialGraph.nodes.length > 0) {\n const mappedNodes: Node[] = initialGraph.nodes.map((savedNode) => {\n if (savedNode.type === 'agent') {\n const agent = agentMap.get(savedNode.data.entityId)\n if (agent) {\n return {\n id: savedNode.id,\n type: 'agent' as const,\n position: savedNode.position,\n data: {\n agent,\n order: agent.order ?? 0,\n selected: selectedAgentId === savedNode.id,\n agentTools: agentTools.map((at) => ({ id: at.agentToolId, name: at.name, category: at.category, enabled: at.enabled })),\n providerName: models.find((m) => m.id === agent.modelId)?.provider,\n onSelect: () => {\n setSelectedAgentId(agent.agentId)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n },\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies AgentNodeData,\n }\n }\n // Agent not found — render placeholder (don't fall through to logic)\n return {\n id: savedNode.id,\n type: 'agent' as const,\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as AgentNodeData,\n }\n }\n if (savedNode.type === 'tool') {\n const tool = toolMap.get(savedNode.data.entityId)\n if (tool) {\n return {\n id: savedNode.id,\n type: 'tool' as const,\n position: savedNode.position,\n data: {\n tool,\n order: typeof tool.displayOrder === 'number' ? tool.displayOrder : 0,\n onEdit: onEditTool,\n onToggle: onToggleTool,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies ToolCanvasData,\n }\n }\n // Tool not found — render placeholder (don't fall through to logic)\n return {\n id: savedNode.id,\n type: 'tool' as const,\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as ToolCanvasData,\n }\n }\n if (savedNode.type === 'rule') {\n const rule = ruleMap.get(savedNode.data.entityId)\n if (rule) {\n return {\n id: savedNode.id,\n type: 'rule' as const,\n position: savedNode.position,\n data: {\n rule,\n order: typeof rule.priority === 'number' ? rule.priority : 0,\n onEdit: onEditRule,\n onToggle: onToggleRule,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n }\n // Rule engine node — no specific rule entity, use config-based rendering\n const ruleConfig = savedNode.data.config as RuleNodeConfig | undefined\n return {\n id: savedNode.id,\n type: 'rule' as const,\n position: savedNode.position,\n data: {\n rule: undefined,\n config: ruleConfig ?? { type: 'rule' as const },\n label: savedNode.data.label,\n order: 0,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n }\n if (savedNode.type === 'entity') {\n const entityConfig = savedNode.data.config as EntityNodeConfig | undefined\n const entity = entityConfig ? entityMap.get(entityConfig.entityMasterId) : undefined\n return {\n id: savedNode.id,\n type: 'entity' as const,\n position: savedNode.position,\n data: {\n config: entityConfig,\n entity,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies EntityNodeData,\n }\n }\n if (savedNode.type === 'datasource') {\n const datasourceConfig = savedNode.data.config as DatasourceNodeConfig | undefined\n const datasourceEntity = datasourceConfig ? entityMap.get(datasourceConfig.datasourceId) : undefined\n const extendedNodeData = savedNode.data as WorkflowNodeData & { readOnly?: boolean }\n return {\n id: savedNode.id,\n type: 'datasource' as const,\n position: savedNode.position,\n data: {\n config: datasourceConfig,\n datasource: datasourceEntity\n ? {\n id: datasourceEntity.id,\n name: datasourceEntity.label,\n dialect: datasourceConfig?.dialect ?? 'unknown',\n }\n : undefined,\n label: savedNode.data.label,\n readOnly: extendedNodeData.readOnly === true,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies DatasourceNodeData,\n }\n }\n if (savedNode.type === 'group') {\n const groupConfig = savedNode.data.config as GroupNodeConfig | undefined\n const defaultGroupConfig: GroupNodeConfig = {\n type: 'group', label: savedNode.data.label || 'Group', color: 'slate',\n isExpanded: true, width: 400, height: 300, collapsedWidth: 260, collapsedHeight: 60,\n }\n const resolvedConfig = groupConfig ?? defaultGroupConfig\n return {\n id: savedNode.id,\n type: 'group' as const,\n position: savedNode.position,\n ...(savedNode.style ? { style: savedNode.style } : { style: { width: resolvedConfig.width, height: resolvedConfig.height } }),\n data: {\n config: resolvedConfig,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies GroupNodeData,\n }\n }\n // Logic nodes — restore from saved config\n if (isLogicNodeType(savedNode.type)) {\n const config = savedNode.data.config ?? createDefaultLogicNodeConfig(savedNode.type as WorkflowNodeType)\n if (config) {\n const baseNode: Node = {\n id: savedNode.id,\n type: savedNode.type,\n position: savedNode.position,\n data: {\n config,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n },\n }\n // Restore parent-child relationships for nodes inside groups\n if (savedNode.parentId) {\n baseNode.parentId = savedNode.parentId\n baseNode.extent = savedNode.extent\n }\n return baseNode\n }\n }\n\n // Fallback: entity was deleted — return a placeholder\n return {\n id: savedNode.id,\n type: savedNode.type as 'agent' | 'tool' | 'rule',\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as AgentNodeData,\n }\n })\n\n // Restore parentId/extent for non-logic nodes (agent, tool, entity, etc.)\n const parentIdMap = new Map<string, { parentId: string; extent?: 'parent' }>()\n for (const savedNode of initialGraph.nodes) {\n if (savedNode.parentId) {\n parentIdMap.set(savedNode.id, { parentId: savedNode.parentId, extent: savedNode.extent })\n }\n }\n const nodesWithParents = mappedNodes.map((node) => {\n const parentInfo = parentIdMap.get(node.id)\n if (parentInfo && !node.parentId) {\n return { ...node, parentId: parentInfo.parentId, extent: parentInfo.extent }\n }\n return node\n })\n\n // Sort: parent (group) nodes must come before their children for React Flow\n return nodesWithParents.sort((nodeA, nodeB) => {\n if (nodeA.type === 'group' && nodeB.parentId === nodeA.id) return -1\n if (nodeB.type === 'group' && nodeA.parentId === nodeB.id) return 1\n return 0\n })\n }\n\n // No saved graph — start empty canvas\n return []\n }, [initialGraph, agentMap, toolMap, ruleMap, entityMap, selectedAgentId, onEditTool, onToggleTool, onEditRule, onToggleRule, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas])\n\n /**\n * Resolve an edge label from the saved graph data (used during initial load\n * when React Flow nodes are not yet mounted — so we read from initialGraph\n * nodes directly instead of using getNode).\n */\n const resolveEdgeLabelFromGraph = useCallback(\n (sourceHandle: string | undefined, sourceNodeId: string): string | undefined => {\n if (!sourceHandle) return undefined\n if (sourceHandle === 'true-out') return 'True'\n if (sourceHandle === 'false-out') return 'False'\n if (sourceHandle === 'loop-out') return 'Loop'\n\n const categoryMatch = sourceHandle.match(/^category-(\\d+)$/)\n if (categoryMatch && initialGraph) {\n const categoryIndex = Number.parseInt(categoryMatch[1], 10)\n const sourceNode = initialGraph.nodes.find((node) => node.id === sourceNodeId)\n if (sourceNode) {\n const config = sourceNode.data.config as { categories?: Array<{ name: string }> } | undefined\n if (config?.categories?.[categoryIndex]) {\n return config.categories[categoryIndex].name\n }\n }\n return `Category ${categoryIndex + 1}`\n }\n\n return undefined\n },\n [initialGraph]\n )\n\n const buildInitialEdges = useCallback((): Edge[] => {\n if (initialGraph && initialGraph.edges.length > 0) {\n // Variable-aggregator fan-in backfill: older graphs (and the pre-fix\n // seed) don't set `targetHandle`, so all incoming edges land on the\n // first port visually. Rewrite missing target handles to `input-0`,\n // `input-1`, ... preserving the edge order in the saved graph.\n const aggregatorIds = new Set(\n initialGraph.nodes.filter((node) => node.type === 'variable_aggregator').map((node) => node.id),\n )\n const aggregatorPortCursor = new Map<string, number>()\n\n return initialGraph.edges.map((savedEdge) => {\n const handle = savedEdge.sourceHandle\n const edgeColor = handle === 'true-out' ? GRAPH_TRUE_EDGE_COLOR\n : handle === 'false-out' ? GRAPH_FALSE_EDGE_COLOR\n : GRAPH_ACTIVE_EDGE_COLOR\n\n let targetHandle = savedEdge.targetHandle\n if (!targetHandle && aggregatorIds.has(savedEdge.target)) {\n const nextIndex = aggregatorPortCursor.get(savedEdge.target) ?? 0\n targetHandle = `input-${nextIndex}`\n aggregatorPortCursor.set(savedEdge.target, nextIndex + 1)\n }\n\n return {\n id: savedEdge.id,\n source: savedEdge.source,\n target: savedEdge.target,\n sourceHandle: savedEdge.sourceHandle,\n targetHandle,\n type: 'default',\n animated: true,\n data: {\n label: resolveEdgeLabelFromGraph(savedEdge.sourceHandle ?? undefined, savedEdge.source),\n onInsertNode: insertNodeOnEdge,\n },\n style: {\n stroke: edgeColor,\n strokeWidth: 2,\n },\n markerEnd: { type: MarkerType.ArrowClosed, color: edgeColor },\n }\n })\n }\n return []\n }, [initialGraph, resolveEdgeLabelFromGraph, insertNodeOnEdge])\n\n const [nodes, setNodes, onNodesChange] = useNodesState(buildInitialNodes())\n const [edges, setEdges, onEdgesChange] = useEdgesState(buildInitialEdges())\n\n // Wire up the group expand ref now that setNodes/setEdges are available\n toggleGroupExpandRef.current = (nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes: Node[]) => {\n const groupNode = currentNodes.find((node) => node.id === nodeId)\n if (!groupNode) return currentNodes\n const groupData = groupNode.data as GroupNodeData\n const groupConfig = groupData.config\n const isCurrentlyExpanded = groupConfig.isExpanded\n const childIds = new Set(currentNodes.filter((node) => node.parentId === nodeId).map((node) => node.id))\n\n return currentNodes.map((node) => {\n if (node.id === nodeId) {\n const updatedConfig: GroupNodeConfig = {\n ...groupConfig,\n isExpanded: !isCurrentlyExpanded,\n }\n return {\n ...node,\n style: !isCurrentlyExpanded\n ? { width: groupConfig.width, height: groupConfig.height }\n : { width: groupConfig.collapsedWidth, height: groupConfig.collapsedHeight },\n data: { ...groupData, config: updatedConfig },\n }\n }\n if (childIds.has(node.id)) {\n return { ...node, hidden: isCurrentlyExpanded }\n }\n return node\n })\n })\n setEdges((currentEdges) => {\n const currentNodeList = useWorkflowStore.getState().nodes\n const storeGroupNode = currentNodeList.find((node) => node.id === nodeId)\n if (!storeGroupNode) return currentEdges\n const storeGroupData = storeGroupNode.data as GroupNodeData\n const isCurrentlyExpanded = storeGroupData.config.isExpanded\n const childIds = new Set(currentNodeList.filter((node) => node.parentId === nodeId).map((node) => node.id))\n\n return currentEdges.map((edge) => {\n if (childIds.has(edge.source) || childIds.has(edge.target)) {\n return { ...edge, hidden: isCurrentlyExpanded }\n }\n return edge\n })\n })\n }\n\n // Reload when initialGraph changes (e.g., after load from server)\n const initialGraphRef = useRef(initialGraph)\n useEffect(() => {\n if (initialGraph !== initialGraphRef.current) {\n initialGraphRef.current = initialGraph\n setNodes(buildInitialNodes())\n setEdges(buildInitialEdges())\n }\n }, [initialGraph, buildInitialNodes, buildInitialEdges, setNodes, setEdges])\n\n // ==========================================================================\n // Keyboard Shortcuts\n // ==========================================================================\n\n const handleSelectAll = useCallback(() => {\n setNodes((currentNodes) => currentNodes.map((node) => ({ ...node, selected: true })))\n }, [setNodes])\n\n const handleDeselectAll = useCallback(() => {\n setNodes((currentNodes) => currentNodes.map((node) => ({ ...node, selected: false })))\n }, [setNodes])\n\n const handleFitView = useCallback(() => {\n fitView({ padding: 0.2 })\n }, [fitView])\n\n const handleLayoutDirectionChange = useCallback(\n (direction: LayoutDirection) => {\n setLayoutDirection(direction)\n if (direction === 'free') {\n // Remove sourcePosition/targetPosition overrides\n setNodes((currentNodes) => currentNodes.map((node) => {\n const { sourcePosition: _s, targetPosition: _t, ...rest } = node\n return rest\n }))\n return\n }\n\n storeTakeSnapshot()\n\n const isTB = direction === 'TB'\n const repositionedNodes = applyDagreLayout(nodes, edges, direction).map((node) => ({\n ...node,\n sourcePosition: isTB ? Position.Bottom : Position.Right,\n targetPosition: isTB ? Position.Top : Position.Left,\n }))\n setNodes(repositionedNodes)\n\n requestAnimationFrame(() => {\n fitView({ padding: 0.2 })\n })\n },\n [nodes, edges, setNodes, setLayoutDirection, fitView, storeTakeSnapshot],\n )\n\n // Sync nodes/edges to Zustand for undo/redo/copy/paste\n const storeSetNodes = useWorkflowStore((state) => state.setNodes)\n const storeSetEdges = useWorkflowStore((state) => state.setEdges)\n\n useEffect(() => {\n storeSetNodes(nodes)\n }, [nodes, storeSetNodes])\n\n useEffect(() => {\n storeSetEdges(edges)\n }, [edges, storeSetEdges])\n\n useEffect(() => {\n const hasMismatch = nodes.some((node) => {\n const nodeData = node.data as Record<string, unknown> | undefined\n return nodeData?.displayMode !== cardDisplayMode\n })\n if (!hasMismatch) return\n\n setNodes((currentNodes) =>\n currentNodes.map((node) => ({\n ...node,\n data: {\n ...(node.data as Record<string, unknown>),\n displayMode: cardDisplayMode,\n },\n }))\n )\n }, [nodes, cardDisplayMode, setNodes])\n\n // Undo/Redo/Paste wrappers — sync Zustand state back to React Flow\n // The raw store actions update Zustand but React Flow uses its own state\n // (useNodesState/useEdgesState), so we must push the restored values back.\n\n const storeUndo = useCallback(() => {\n storeUndoRaw()\n const { nodes: restoredNodes, edges: restoredEdges } = useWorkflowStore.getState()\n setNodes(restoredNodes)\n setEdges(restoredEdges)\n }, [storeUndoRaw, setNodes, setEdges])\n\n const storeRedo = useCallback(() => {\n storeRedoRaw()\n const { nodes: restoredNodes, edges: restoredEdges } = useWorkflowStore.getState()\n setNodes(restoredNodes)\n setEdges(restoredEdges)\n }, [storeRedoRaw, setNodes, setEdges])\n\n const storePaste = useCallback(() => {\n storePasteRaw()\n const { nodes: pastedNodes, edges: pastedEdges } = useWorkflowStore.getState()\n setNodes(pastedNodes)\n setEdges(pastedEdges)\n }, [storePasteRaw, setNodes, setEdges])\n\n // Duplicate = copy + paste in one action\n const handleDuplicateSelected = useCallback(() => {\n storeCopy()\n storePasteRaw()\n const { nodes: duplicatedNodes, edges: duplicatedEdges } = useWorkflowStore.getState()\n setNodes(duplicatedNodes)\n setEdges(duplicatedEdges)\n }, [storeCopy, storePasteRaw, setNodes, setEdges])\n\n // Snapshot on node drag start (so dragging positions can be undone)\n const onNodeDragStart = useCallback(() => {\n storeTakeSnapshot()\n }, [storeTakeSnapshot])\n\n // ==========================================================================\n // Context Menu Action Callbacks\n // These operate on React Flow state (setNodes/setEdges) directly,\n // ensuring the canvas re-renders. Zustand sync happens via useEffect.\n // ==========================================================================\n\n const contextMenuEditNode = useCallback((nodeId: string) => {\n const targetNode = nodes.find((node) => node.id === nodeId)\n if (!targetNode) return\n\n if (targetNode.type === 'agent') {\n const agent = (targetNode.data as AgentNodeData)?.agent\n if (agent) {\n setSelectedAgentId(agent.agentId ?? agent.id ?? null)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n }\n } else if (targetNode.type === 'tool') {\n const tool = (targetNode.data as ToolCanvasData)?.tool\n if (tool) onEditTool?.(tool)\n } else if (targetNode.type === 'rule' && (targetNode.data as RuleNodeData)?.rule) {\n onEditRule?.((targetNode.data as RuleNodeData).rule!)\n } else {\n handleEditLogicNode(nodeId)\n }\n }, [nodes, setSelectedAgentId, openAgentModalAction, models, onEditTool, onEditRule, handleEditLogicNode])\n\n const DUPLICATE_OFFSET = 40\n\n const contextMenuDuplicateNode = useCallback((nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes) => {\n const targetNode = currentNodes.find((node) => node.id === nodeId)\n if (!targetNode) return currentNodes\n const duplicatedNode = {\n ...targetNode,\n id: crypto.randomUUID(),\n position: {\n x: targetNode.position.x + DUPLICATE_OFFSET,\n y: targetNode.position.y + DUPLICATE_OFFSET,\n },\n selected: true,\n data: { ...targetNode.data },\n }\n return [\n ...currentNodes.map((node) => ({ ...node, selected: false })),\n duplicatedNode,\n ]\n })\n }, [storeTakeSnapshot, setNodes])\n\n const contextMenuCopyNode = useCallback((nodeId: string) => {\n setNodes((currentNodes) =>\n currentNodes.map((node) => ({\n ...node,\n selected: node.id === nodeId,\n })),\n )\n requestAnimationFrame(() => {\n storeCopy()\n })\n }, [setNodes, storeCopy])\n\n const contextMenuDeleteNode = useCallback((nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes) => currentNodes.filter((node) => node.id !== nodeId))\n setEdges((currentEdges) =>\n currentEdges.filter(\n (edge) => edge.source !== nodeId && edge.target !== nodeId,\n ),\n )\n }, [storeTakeSnapshot, setNodes, setEdges])\n\n const contextMenuPaste = useCallback(() => {\n storePaste()\n }, [storePaste])\n\n const contextMenuAddNote = useCallback((flowPosition: { x: number; y: number }) => {\n storeTakeSnapshot()\n const noteConfig = createDefaultLogicNodeConfig('note')\n const noteNode = {\n id: crypto.randomUUID(),\n type: 'note' as const,\n position: flowPosition,\n selected: true,\n data: {\n entityId: '',\n label: 'Note',\n config: noteConfig,\n },\n }\n setNodes((currentNodes) => [\n ...currentNodes.map((node) => ({ ...node, selected: false })),\n noteNode,\n ])\n }, [storeTakeSnapshot, setNodes])\n\n const contextMenuCopySelection = useCallback(() => {\n storeCopy()\n }, [storeCopy])\n\n const contextMenuDuplicateSelection = useCallback(() => {\n handleDuplicateSelected()\n }, [handleDuplicateSelected])\n\n const contextMenuDeleteSelection = useCallback(() => {\n storeTakeSnapshot()\n setNodes((currentNodes) => {\n const selectedIds = new Set(currentNodes.filter((node) => node.selected).map((node) => node.id))\n return currentNodes.filter((node) => !selectedIds.has(node.id))\n })\n setEdges((currentEdges) => {\n const currentNodeList = nodes\n const selectedIds = new Set(currentNodeList.filter((node) => node.selected).map((node) => node.id))\n return currentEdges.filter(\n (edge) => !selectedIds.has(edge.source) && !selectedIds.has(edge.target),\n )\n })\n }, [storeTakeSnapshot, setNodes, setEdges, nodes])\n\n const contextMenuGroupSelected = useCallback(() => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 2) return\n storeTakeSnapshot()\n\n const GROUP_PADDING = 40\n const GROUP_HEADER_HEIGHT = 36\n\n let minX = Infinity\n let minY = Infinity\n let maxX = -Infinity\n let maxY = -Infinity\n\n for (const node of selectedNodes) {\n const dimensions = getNodeDimensions(node)\n minX = Math.min(minX, node.position.x)\n minY = Math.min(minY, node.position.y)\n maxX = Math.max(maxX, node.position.x + dimensions.width)\n maxY = Math.max(maxY, node.position.y + dimensions.height)\n }\n\n const groupWidth = maxX - minX + GROUP_PADDING * 2\n const groupHeight = maxY - minY + GROUP_PADDING * 2 + GROUP_HEADER_HEIGHT\n const groupId = crypto.randomUUID()\n const groupPosition = { x: minX - GROUP_PADDING, y: minY - GROUP_PADDING - GROUP_HEADER_HEIGHT }\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n\n const groupNode: Node = {\n id: groupId,\n type: 'group',\n position: groupPosition,\n style: { width: groupWidth, height: groupHeight },\n data: {\n config: {\n type: 'group',\n label: 'Group',\n color: 'slate',\n isExpanded: true,\n width: groupWidth,\n height: groupHeight,\n collapsedWidth: 260,\n collapsedHeight: 60,\n },\n label: 'Group',\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n },\n }\n\n setNodes((currentNodes) => {\n const updatedNodes = currentNodes.map((node) => {\n if (selectedNodeIds.has(node.id)) {\n return {\n ...node,\n parentId: groupId,\n extent: 'parent' as const,\n position: {\n x: node.position.x - groupPosition.x,\n y: node.position.y - groupPosition.y,\n },\n selected: false,\n }\n }\n return { ...node, selected: false }\n })\n return [groupNode, ...updatedNodes]\n })\n }, [nodes, storeTakeSnapshot, setNodes, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas])\n\n const contextMenuUngroupSelected = useCallback(() => {\n const selectedGroupNodes = nodes.filter((node) => node.selected && node.type === 'group')\n if (selectedGroupNodes.length === 0) return\n storeTakeSnapshot()\n\n const groupIds = new Set(selectedGroupNodes.map((node) => node.id))\n\n setNodes((currentNodes) => {\n const updatedNodes = currentNodes\n .filter((node) => !groupIds.has(node.id))\n .map((node) => {\n if (node.parentId && groupIds.has(node.parentId)) {\n const parentGroup = currentNodes.find((groupNode) => groupNode.id === node.parentId)\n const parentPosition = parentGroup?.position ?? { x: 0, y: 0 }\n return {\n ...node,\n parentId: undefined,\n extent: undefined,\n position: {\n x: node.position.x + parentPosition.x,\n y: node.position.y + parentPosition.y,\n },\n }\n }\n return node\n })\n return updatedNodes\n })\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const contextMenuAlignNodes = useCallback((direction: AlignDirection) => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 2) return\n storeTakeSnapshot()\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n\n setNodes((currentNodes) => {\n switch (direction) {\n case 'left': {\n const minX = Math.min(...selectedNodes.map((node) => node.position.x))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: minX } } : node,\n )\n }\n case 'right': {\n const maxRight = Math.max(...selectedNodes.map((node) => node.position.x + getNodeDimensions(node).width))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: maxRight - getNodeDimensions(node).width } } : node,\n )\n }\n case 'top': {\n const minY = Math.min(...selectedNodes.map((node) => node.position.y))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: minY } } : node,\n )\n }\n case 'bottom': {\n const maxBottom = Math.max(...selectedNodes.map((node) => node.position.y + getNodeDimensions(node).height))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: maxBottom - getNodeDimensions(node).height } } : node,\n )\n }\n case 'centerHorizontal': {\n const positions = selectedNodes.map((node) => node.position.x + getNodeDimensions(node).width / 2)\n const centerX = (Math.min(...positions) + Math.max(...positions)) / 2\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: centerX - getNodeDimensions(node).width / 2 } } : node,\n )\n }\n case 'centerVertical': {\n const positions = selectedNodes.map((node) => node.position.y + getNodeDimensions(node).height / 2)\n const centerY = (Math.min(...positions) + Math.max(...positions)) / 2\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: centerY - getNodeDimensions(node).height / 2 } } : node,\n )\n }\n default:\n return currentNodes\n }\n })\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const contextMenuDistributeNodes = useCallback((direction: DistributeDirection) => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 3) return\n storeTakeSnapshot()\n\n const positionMap = new Map<string, number>()\n\n if (direction === 'horizontal') {\n const sorted = [...selectedNodes].sort((nodeA, nodeB) => nodeA.position.x - nodeB.position.x)\n const firstNode = sorted[0]\n const lastNode = sorted[sorted.length - 1]\n const totalWidth = (lastNode.position.x + getNodeDimensions(lastNode).width) - firstNode.position.x\n const nodesWidth = sorted.reduce((sum, node) => sum + getNodeDimensions(node).width, 0)\n const spacing = (totalWidth - nodesWidth) / (sorted.length - 1)\n let currentX = firstNode.position.x\n for (const node of sorted) {\n positionMap.set(node.id, currentX)\n currentX += getNodeDimensions(node).width + spacing\n }\n } else {\n const sorted = [...selectedNodes].sort((nodeA, nodeB) => nodeA.position.y - nodeB.position.y)\n const firstNode = sorted[0]\n const lastNode = sorted[sorted.length - 1]\n const totalHeight = (lastNode.position.y + getNodeDimensions(lastNode).height) - firstNode.position.y\n const nodesHeight = sorted.reduce((sum, node) => sum + getNodeDimensions(node).height, 0)\n const spacing = (totalHeight - nodesHeight) / (sorted.length - 1)\n let currentY = firstNode.position.y\n for (const node of sorted) {\n positionMap.set(node.id, currentY)\n currentY += getNodeDimensions(node).height + spacing\n }\n }\n\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (!positionMap.has(node.id)) return node\n const value = positionMap.get(node.id) ?? 0\n return direction === 'horizontal'\n ? { ...node, position: { ...node.position, x: value } }\n : { ...node, position: { ...node.position, y: value } }\n }),\n )\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const storeClipboard = useWorkflowStore((state) => state.clipboard)\n const hasClipboardContent = storeClipboard !== null && storeClipboard.nodes.length > 0\n\n // Keyboard shortcuts\n useEffect(() => {\n const INPUT_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT'])\n\n function isInputFocused(): boolean {\n const activeElement = document.activeElement\n if (!activeElement) return false\n return INPUT_TAGS.has(activeElement.tagName) || (activeElement as HTMLElement).isContentEditable\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (isInputFocused()) return\n\n const isModifierPressed = event.metaKey || event.ctrlKey\n\n if (!isModifierPressed) {\n if (event.key === 'Escape') {\n handleDeselectAll()\n return\n }\n if (event.key.toLowerCase() === 'v') {\n setControlMode('pointer')\n return\n }\n if (event.key.toLowerCase() === 'h') {\n setControlMode('hand')\n return\n }\n if (event.key.toLowerCase() === 'g') {\n toggleDots()\n return\n }\n if (event.key.toLowerCase() === 'm') {\n toggleMinimap()\n return\n }\n // Shift+1 → Zoom to 100%\n if (event.shiftKey && event.key === '!') {\n event.preventDefault()\n zoomTo(1)\n return\n }\n // Shift+5 → Zoom to 50%\n if (event.shiftKey && event.key === '%') {\n event.preventDefault()\n zoomTo(0.5)\n return\n }\n return\n }\n\n switch (event.key.toLowerCase()) {\n case 'g': {\n event.preventDefault()\n if (event.shiftKey) {\n contextMenuUngroupSelected()\n } else {\n contextMenuGroupSelected()\n }\n break\n }\n case 'z': {\n if (event.shiftKey) {\n if (canRedo) {\n event.preventDefault()\n storeRedo()\n }\n } else {\n if (canUndo) {\n event.preventDefault()\n storeUndo()\n }\n }\n break\n }\n case 'y': {\n if (canRedo) {\n event.preventDefault()\n storeRedo()\n }\n break\n }\n case 'c': {\n event.preventDefault()\n storeCopy()\n break\n }\n case 'v': {\n event.preventDefault()\n storePaste()\n break\n }\n case 'a': {\n event.preventDefault()\n handleSelectAll()\n break\n }\n case 'd': {\n event.preventDefault()\n handleDuplicateSelected()\n break\n }\n case 'f': {\n if (event.shiftKey) {\n event.preventDefault()\n handleFitView()\n }\n break\n }\n case '1': {\n // Ctrl/Cmd+1 → Fit to view\n event.preventDefault()\n handleFitView()\n break\n }\n case '-':\n case '_': {\n // Ctrl/Cmd+- → Zoom out\n event.preventDefault()\n zoomOut()\n break\n }\n case '=':\n case '+': {\n // Ctrl/Cmd+= → Zoom in\n event.preventDefault()\n zoomIn()\n break\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, { capture: true })\n return () => {\n document.removeEventListener('keydown', handleKeyDown, { capture: true })\n }\n }, [canUndo, canRedo, storeUndo, storeRedo, storeCopy, storePaste, handleSelectAll, handleDeselectAll, handleFitView, handleDuplicateSelected, setControlMode, zoomTo, zoomIn, zoomOut, contextMenuGroupSelected, contextMenuUngroupSelected])\n\n // ==========================================================================\n // Graph serialization helper (shared by debounced save and immediate save)\n // ==========================================================================\n\n const serializeGraph = useCallback((): WorkflowGraph => {\n const flowObject = toObject()\n return {\n nodes: flowObject.nodes.map((node: Node) => {\n const nodeData = node.data as Record<string, unknown> | undefined\n const agent = nodeData?.agent as Record<string, unknown> | undefined\n const tool = nodeData?.tool as Record<string, unknown> | undefined\n const rule = nodeData?.rule as Record<string, unknown> | undefined\n const nodeConfig = nodeData?.config as LogicNodeConfig | undefined\n const serializedNode = {\n id: node.id,\n type: (node.type ?? 'agent') as WorkflowNodeType,\n position: node.position,\n data: {\n entityId: (nodeData?.entityId as string) ?? (agent?.agentId as string) ?? (tool?.toolId as string) ?? (rule?.ruleId as string) ?? node.type ?? '',\n label: (nodeData?.label as string) ?? (agent?.name as string) ?? (tool?.name as string) ?? (rule?.name as string) ?? '',\n ...(nodeConfig ? { config: nodeConfig } : {}),\n },\n // Persist group parent-child relationships\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.extent === 'parent' ? { extent: 'parent' as const } : {}),\n ...(node.style ? { style: node.style as { width?: number; height?: number } } : {}),\n }\n return serializedNode\n }),\n edges: flowObject.edges.map((edge: Edge) => ({\n id: edge.id,\n source: edge.source,\n target: edge.target,\n sourceHandle: edge.sourceHandle ?? '',\n targetHandle: edge.targetHandle ?? '',\n })),\n viewport: flowObject.viewport,\n }\n }, [toObject])\n\n // ==========================================================================\n // Graph change notification (debounced for auto-save)\n // ==========================================================================\n\n useEffect(() => {\n if (!onGraphChange) return\n\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n }\n\n graphChangeTimerRef.current = setTimeout(() => {\n onGraphChange(serializeGraph())\n }, AUTO_SAVE_DEBOUNCE_MS)\n\n return () => {\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n }\n }\n }, [nodes, edges, onGraphChange, serializeGraph])\n\n // ==========================================================================\n // Immediate save on visibility change / page unload (Dify-style)\n // ==========================================================================\n\n useEffect(() => {\n if (!onGraphChange) return\n\n const handleVisibilityChange = () => {\n if (document.visibilityState === 'hidden') {\n // Flush any pending debounced save immediately\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n graphChangeTimerRef.current = null\n }\n onGraphChange(serializeGraph())\n }\n }\n\n const handleBeforeUnload = () => {\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n graphChangeTimerRef.current = null\n }\n onGraphChange(serializeGraph())\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n window.addEventListener('beforeunload', handleBeforeUnload)\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [onGraphChange, serializeGraph])\n\n // ==========================================================================\n // Drag & drop handler — create node at drop position\n // ==========================================================================\n\n const onDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault()\n const nodeType = event.dataTransfer.getData('nodeType') as WorkflowNodeType\n const entityId = event.dataTransfer.getData('entityId')\n const label = event.dataTransfer.getData('label')\n const configRaw = event.dataTransfer.getData('config')\n\n if (!nodeType || !entityId) return\n\n storeTakeSnapshot()\n\n const position = screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n })\n\n const newNodeId = crypto.randomUUID()\n\n if (nodeType === 'agent') {\n const agent = agentMap.get(entityId)\n if (!agent) return\n const newNode: Node = {\n id: newNodeId,\n type: 'agent',\n position,\n data: {\n agent,\n order: agent.order ?? 0,\n selected: false,\n onSelect: () => {\n setSelectedAgentId(agent.agentId)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n },\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies AgentNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'tool') {\n const tool = toolMap.get(entityId)\n if (!tool) return\n const newNode: Node = {\n id: newNodeId,\n type: 'tool',\n position,\n data: {\n tool,\n order: typeof tool.displayOrder === 'number' ? tool.displayOrder : 0,\n onEdit: onEditTool,\n onToggle: onToggleTool,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies ToolCanvasData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'agent_tool') {\n const agentTool = agentToolMap.get(entityId)\n if (!agentTool) return\n const newNode: Node = {\n id: newNodeId,\n type: 'agent_tool',\n position,\n data: {\n agentTool,\n order: 0,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n },\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'rule') {\n const rule = ruleMap.get(entityId)\n if (!rule) return\n const newNode: Node = {\n id: newNodeId,\n type: 'rule',\n position,\n data: {\n rule,\n order: typeof rule.priority === 'number' ? rule.priority : 0,\n onEdit: onEditRule,\n onToggle: onToggleRule,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'entity') {\n const entityConfig = configRaw\n ? JSON.parse(configRaw) as EntityNodeConfig\n : undefined\n if (!entityConfig) return\n const entity = entityMap.get(entityConfig.entityMasterId)\n const newNode: Node = {\n id: newNodeId,\n type: 'entity',\n position,\n data: {\n config: entityConfig,\n entity,\n label,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies EntityNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'group') {\n const groupConfig = configRaw\n ? JSON.parse(configRaw) as GroupNodeConfig\n : createDefaultLogicNodeConfig('group') as GroupNodeConfig\n if (!groupConfig) return\n const newNode: Node = {\n id: newNodeId,\n type: 'group',\n position,\n style: { width: groupConfig.width, height: groupConfig.height },\n data: {\n config: { ...groupConfig, label: label || 'Group' },\n label: label || 'Group',\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies GroupNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (isLogicNodeType(nodeType)) {\n const config = configRaw\n ? JSON.parse(configRaw) as LogicNodeConfig\n : createDefaultLogicNodeConfig(nodeType)\n if (!config) return\n\n // Check if dropping onto an expanded group node — re-parent\n const newNode: Node = {\n id: newNodeId,\n type: nodeType,\n position,\n data: {\n config,\n label,\n onEdit: handleEditLogicNode,\n },\n }\n\n setNodes((currentNodes) => {\n // Find if dropped position is inside an expanded group\n const targetGroup = currentNodes.find((node) => {\n if (node.type !== 'group') return false\n const groupData = node.data as GroupNodeData\n if (!groupData.config.isExpanded) return false\n const groupWidth = (node.style as { width?: number })?.width ?? groupData.config.width\n const groupHeight = (node.style as { height?: number })?.height ?? groupData.config.height\n return (\n position.x >= node.position.x &&\n position.x <= node.position.x + groupWidth &&\n position.y >= node.position.y &&\n position.y <= node.position.y + groupHeight\n )\n })\n\n if (targetGroup) {\n newNode.parentId = targetGroup.id\n newNode.extent = 'parent'\n // Convert to relative position within group\n newNode.position = {\n x: position.x - targetGroup.position.x,\n y: position.y - targetGroup.position.y,\n }\n }\n\n return [...currentNodes, newNode]\n })\n }\n },\n [screenToFlowPosition, agentMap, toolMap, ruleMap, entityMap, setNodes, onEditTool, onToggleTool, onEditRule, onToggleRule, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas, storeTakeSnapshot]\n )\n\n const onDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n }, [])\n\n // ==========================================================================\n // Connection handler — draw edge between nodes\n // ==========================================================================\n\n /**\n * Resolve a human-readable edge label from the source handle.\n * Supports: IF/ELSE (true-out / false-out), Question Classifier (category-N),\n * and Iteration (loop-out).\n */\n const resolveEdgeLabel = useCallback(\n (sourceHandle: string | null | undefined, sourceNodeId: string): string | undefined => {\n if (!sourceHandle) return undefined\n if (sourceHandle === 'true-out') return 'True'\n if (sourceHandle === 'false-out') return 'False'\n if (sourceHandle === 'loop-out') return 'Loop'\n\n // Question Classifier: category-0, category-1, …\n const categoryMatch = sourceHandle.match(/^category-(\\d+)$/)\n if (categoryMatch) {\n const categoryIndex = Number.parseInt(categoryMatch[1], 10)\n const sourceNode = getNode(sourceNodeId)\n if (sourceNode) {\n const nodeData = sourceNode.data as Record<string, unknown>\n const config = nodeData.config as { categories?: Array<{ name: string }> } | undefined\n if (config?.categories?.[categoryIndex]) {\n return config.categories[categoryIndex].name\n }\n }\n return `Category ${categoryIndex + 1}`\n }\n\n return undefined\n },\n [getNode]\n )\n\n const onConnect = useCallback(\n (connection: Connection) => {\n storeTakeSnapshot()\n\n const edgeLabel = resolveEdgeLabel(connection.sourceHandle, connection.source)\n\n // Aggregator auto-port: a variable_aggregator renders `inputVariables.length`\n // target handles (`input-0`..`input-{N-1}`). When a new edge lands on one\n // without a targetHandle, React Flow snaps it to the first handle — so\n // every connection stacks on `input-0` and visually the fan-in looks\n // like a single cable. Intercept the connection to (a) pick the next\n // free `input-N` handle and (b) grow `config.inputVariables` so the\n // port actually appears.\n const targetNode = connection.target ? getNode(connection.target) : undefined\n let resolvedConnection: Connection = connection\n if (targetNode?.type === 'variable_aggregator') {\n const aggConfig = (targetNode.data as { config?: { inputVariables?: string[] } }).config\n const existingInputs = aggConfig?.inputVariables ?? []\n const nextIndex = existingInputs.length\n const nextHandle = `input-${nextIndex}`\n resolvedConnection = { ...connection, targetHandle: nextHandle }\n\n const nextVarName = connection.source ?? `input-${nextIndex + 1}`\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (node.id !== connection.target) return node\n const data = node.data as VariableAggregatorNodeData\n const nextConfig = {\n ...(data.config ?? { type: 'variable_aggregator' as const, inputVariables: [], outputVariable: 'context' }),\n inputVariables: [...existingInputs, nextVarName],\n }\n return { ...node, data: { ...data, config: nextConfig } }\n })\n )\n }\n\n setEdges((currentEdges) =>\n addEdge(\n {\n ...resolvedConnection,\n type: 'default',\n animated: true,\n data: { label: edgeLabel, onInsertNode: insertNodeOnEdge },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n },\n currentEdges\n )\n )\n },\n [setEdges, setNodes, getNode, storeTakeSnapshot, resolveEdgeLabel, insertNodeOnEdge]\n )\n\n // Connection validation: extended for all 20 node types\n const isValidConnection = useCallback(\n (connection: Connection | Edge) => {\n const sourceNode = getNode(connection.source)\n const targetNode = getNode(connection.target)\n if (!sourceNode || !targetNode) return false\n\n // No self-connections\n if (connection.source === connection.target) return false\n\n const sourceType = sourceNode.type as WorkflowNodeType\n const targetType = targetNode.type as WorkflowNodeType\n\n // Note nodes cannot connect at all — they are annotations\n if (sourceType === 'note' || targetType === 'note') return false\n\n // Start can only be a source, never a target\n if (targetType === 'start') return false\n // End can only be a target, never a source\n if (sourceType === 'end') return false\n // Answer is a terminal node — target only, no outgoing\n if (sourceType === 'answer') return false\n\n // iteration_start can only accept source from iteration node\n if (targetType === 'iteration_start' && sourceType !== 'iteration') return false\n\n // Tool → Agent only\n if (sourceType === 'tool') return targetType === 'agent'\n // Agent → Agent, Rule, or any logic node (not tool)\n if (sourceType === 'agent') return targetType !== 'tool'\n // Rule cannot be a source\n if (sourceType === 'rule') return false\n\n // Start → any (except start, already handled)\n if (sourceType === 'start') return true\n // IF/ELSE → any (has true-out and false-out)\n if (sourceType === 'if_else') return true\n // Question Classifier → any (has N category outputs)\n if (sourceType === 'question_classifier') return true\n // Iteration → any (has right-out and loop-out)\n if (sourceType === 'iteration') return true\n\n // Standard logic nodes (code, http_request, template_transform,\n // knowledge_base, parameter_extractor, variable_assigner,\n // variable_aggregator, document_extractor, list_operator,\n // iteration_start) → any valid target\n if (isLogicNodeType(sourceType)) return true\n\n return false\n },\n [getNode]\n )\n\n const onNodesDelete = useCallback(\n (deletedNodes: Node[]) => {\n storeTakeSnapshot()\n // Deletion is handled by React Flow — snapshot taken for undo\n void deletedNodes\n },\n [storeTakeSnapshot]\n )\n\n // ==========================================================================\n // Edge mid-point node insertion (Dify-style + button)\n // ==========================================================================\n\n // Keep the ref in sync with the latest closure\n insertNodeOnEdgeRef.current = useCallback(\n (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => {\n if (!isLogicNodeType(nodeType)) return\n\n storeTakeSnapshot()\n\n const config = createDefaultLogicNodeConfig(nodeType)\n if (!config) return\n\n const newNodeId = crypto.randomUUID()\n const newNode: Node = {\n id: newNodeId,\n type: nodeType,\n position: { x: position.x - 130, y: position.y - 40 },\n data: {\n config,\n label: nodeType.replace(/_/g, ' ').replace(/\\b\\w/g, (character) => character.toUpperCase()),\n onEdit: handleEditLogicNode,\n },\n }\n\n setNodes((currentNodes) => [...currentNodes, newNode])\n\n setEdges((currentEdges) => {\n const originalEdge = currentEdges.find((edge) => edge.id === edgeId)\n if (!originalEdge) return currentEdges\n\n const edgesWithoutOriginal = currentEdges.filter((edge) => edge.id !== edgeId)\n\n const sourceToNewEdge: Edge = {\n id: crypto.randomUUID(),\n source: originalEdge.source,\n target: newNodeId,\n sourceHandle: originalEdge.sourceHandle,\n targetHandle: 'left-in',\n type: 'default',\n animated: true,\n data: {\n label: (originalEdge.data as Record<string, unknown> | undefined)?.label as string | undefined,\n onInsertNode: insertNodeOnEdge,\n },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n }\n\n const newToTargetEdge: Edge = {\n id: crypto.randomUUID(),\n source: newNodeId,\n target: originalEdge.target,\n sourceHandle: 'right-out',\n targetHandle: originalEdge.targetHandle,\n type: 'default',\n animated: true,\n data: { onInsertNode: insertNodeOnEdge },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n }\n\n return [...edgesWithoutOriginal, sourceToNewEdge, newToTargetEdge]\n })\n },\n [storeTakeSnapshot, setNodes, setEdges, handleEditLogicNode, insertNodeOnEdge]\n )\n\n // ==========================================================================\n // Context menus (Dify-style right-click menus)\n // ==========================================================================\n\n type ContextMenuState = {\n type: 'node' | 'panel' | 'selection'\n position: { x: number; y: number }\n flowPosition?: { x: number; y: number }\n targetId?: string\n } | null\n\n const [contextMenu, setContextMenu] = useState<ContextMenuState>(null)\n\n const handleNodeContextMenu = useCallback(\n (event: React.MouseEvent, node: Node) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n setContextMenu({\n type: 'node',\n position: { x: event.clientX, y: event.clientY },\n targetId: node.id,\n })\n },\n []\n )\n\n const handlePaneContextMenu = useCallback(\n (event: MouseEvent | React.MouseEvent) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n const flowPos = screenToFlowPosition({ x: event.clientX, y: event.clientY })\n setContextMenu({\n type: 'panel',\n position: { x: event.clientX, y: event.clientY },\n flowPosition: flowPos,\n })\n },\n [screenToFlowPosition]\n )\n\n const handleSelectionContextMenu = useCallback(\n (event: MouseEvent | React.MouseEvent) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n setContextMenu({\n type: 'selection',\n position: { x: event.clientX, y: event.clientY },\n })\n },\n []\n )\n\n // Anti-race-condition guard: prevent context menu from re-opening immediately\n // after a close (mousedown close fires, then contextmenu event re-opens)\n const lastContextMenuCloseRef = useRef<number>(0)\n\n const closeContextMenu = useCallback(() => {\n setContextMenu((previous) => {\n if (previous !== null) {\n lastContextMenuCloseRef.current = Date.now()\n }\n return null\n })\n }, [])\n\n // Close context menu on pane/node/edge click or canvas move\n const handlePaneClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n const handleNodeClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n const handleEdgeClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n\n // Logic node editing: derive the editing node's config from current nodes\n const editingLogicNode = useMemo(() => {\n if (!editingLogicNodeId) return null\n const node = nodes.find((matchingNode) => matchingNode.id === editingLogicNodeId)\n if (!node) return null\n const nodeData = node.data as Record<string, unknown>\n const config = nodeData.config as LogicNodeConfig\n const label = (nodeData.label as string) ?? ''\n return { nodeId: editingLogicNodeId, config, label }\n }, [editingLogicNodeId, nodes])\n\n const handleSaveLogicNodeConfig = useCallback((nodeId: string, updatedConfig: LogicNodeConfig) => {\n storeTakeSnapshot()\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (node.id !== nodeId) return node\n const updatedData: Record<string, unknown> = { ...node.data, config: updatedConfig }\n // Sync data.label when group config label changes\n if (updatedConfig.type === 'group' && 'label' in updatedConfig) {\n updatedData.label = updatedConfig.label\n }\n return { ...node, data: updatedData }\n })\n )\n setEditingLogicNodeId(null)\n }, [setNodes, storeTakeSnapshot])\n\n return (\n <>\n <div className=\"relative h-full w-full\">\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onConnect={onConnect}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onNodesDelete={onNodesDelete}\n onNodeDragStart={onNodeDragStart}\n onPaneClick={handlePaneClick}\n onNodeClick={handleNodeClick}\n onEdgeClick={handleEdgeClick}\n onNodeContextMenu={handleNodeContextMenu}\n onPaneContextMenu={handlePaneContextMenu}\n onSelectionContextMenu={handleSelectionContextMenu}\n isValidConnection={isValidConnection}\n nodeTypes={mergedNodeTypes}\n edgeTypes={edgeTypes}\n defaultEdgeOptions={DEFAULT_EDGE_OPTIONS}\n connectionLineComponent={CustomConnectionLine}\n panOnDrag={controlMode === 'hand' ? true : [1, 2]}\n selectionOnDrag={controlMode === 'pointer'}\n snapToGrid\n snapGrid={SNAP_GRID}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n minZoom={0.3}\n maxZoom={1.5}\n defaultViewport={{ x: 0, y: 0, zoom: 0.8 }}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={['Backspace', 'Delete']}\n connectionLineStyle={{ stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 }}\n >\n {showDots && (\n <Background\n variant={BackgroundVariant.Dots}\n gap={20}\n size={1}\n className=\"!bg-transparent\"\n />\n )}\n {showMinimap && (\n <MiniMap\n nodeColor={getMinimapNodeColor}\n maskColor=\"rgba(0, 0, 0, 0.08)\"\n className=\"!rounded-lg !border-white/30 !shadow-lg !backdrop-blur-xl dark:!border-white/10 [&]:!bg-white/50 dark:[&]:!bg-gray-900/60\"\n style={{ '--xy-minimap-background-color': 'transparent' } as React.CSSProperties}\n pannable\n zoomable\n />\n )}\n </ReactFlow>\n\n {/* Draggable floating command bar — outside ReactFlow so backdrop-filter works */}\n <DraggableCommandBar\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n onFitView={handleFitView}\n onUndo={storeUndo}\n onRedo={storeRedo}\n canUndo={canUndo}\n canRedo={canRedo}\n controlMode={controlMode}\n onControlModeChange={setControlMode}\n showMinimap={showMinimap}\n onToggleMinimap={toggleMinimap}\n showDots={showDots}\n onToggleDots={toggleDots}\n cardDisplayMode={cardDisplayMode}\n onToggleCardDisplayMode={toggleCardDisplayMode}\n layoutDirection={layoutDirection}\n onLayoutDirectionChange={handleLayoutDirectionChange}\n showShortcuts={showShortcuts}\n onToggleShortcuts={toggleShortcuts}\n onCloseShortcuts={closeShortcuts}\n tWorkflow={tWorkflow}\n />\n\n {/* Right-click context menus (Dify-style) */}\n {contextMenu?.type === 'node' && contextMenu.targetId && (\n <NodeContextMenu\n position={contextMenu.position}\n targetId={contextMenu.targetId}\n onClose={closeContextMenu}\n onEdit={contextMenuEditNode}\n onDuplicate={contextMenuDuplicateNode}\n onCopy={contextMenuCopyNode}\n onDelete={contextMenuDeleteNode}\n />\n )}\n {contextMenu?.type === 'panel' && contextMenu.flowPosition && (\n <PanelContextMenu\n position={contextMenu.position}\n flowPosition={contextMenu.flowPosition}\n onClose={closeContextMenu}\n onPaste={contextMenuPaste}\n onSelectAll={handleSelectAll}\n onFitView={handleFitView}\n onAddNote={contextMenuAddNote}\n hasClipboardContent={hasClipboardContent}\n />\n )}\n {contextMenu?.type === 'selection' && (\n <SelectionContextMenu\n position={contextMenu.position}\n onClose={closeContextMenu}\n onCopy={contextMenuCopySelection}\n onDuplicate={contextMenuDuplicateSelection}\n onDelete={contextMenuDeleteSelection}\n onGroupSelected={contextMenuGroupSelected}\n onAlign={contextMenuAlignNodes}\n onDistribute={contextMenuDistributeNodes}\n />\n )}\n </div>\n\n {renderAgentModal?.({\n agent: selectedAgent,\n models,\n open: modalOpen || isCreatingAgent,\n isCreateMode: isCreatingAgent,\n onClose: () => {\n closeModalAction()\n setSelectedAgentId(null)\n if (isCreatingAgent) onCancelCreateAgent?.()\n },\n onSaved: () => {\n closeModalAction()\n setSelectedAgentId(null)\n if (isCreatingAgent) onCancelCreateAgent?.()\n onAgentSaved?.()\n },\n })}\n\n <LogicNodeModal\n onSave={(nodeId, config) => {\n handleSaveLogicNodeConfig(nodeId, config)\n closeModalAction()\n setEditingLogicNodeId(null)\n }}\n entities={allEntities}\n />\n\n {/* Datasource modal — standalone GlassModal with sidebar */}\n {editingLogicNode?.config?.type === 'datasource' && (\n <DatasourceNodeConfigForm\n open\n nodeId={editingLogicNode.nodeId}\n config={editingLogicNode.config as DatasourceNodeConfig}\n readOnly={Boolean((nodes.find((n) => n.id === editingLogicNode.nodeId)?.data as Record<string, unknown>)?.readOnly)}\n onSave={(updatedConfig) => {\n handleSaveLogicNodeConfig(editingLogicNode.nodeId, updatedConfig)\n setEditingLogicNodeId(null)\n }}\n onCancel={() => setEditingLogicNodeId(null)}\n datasources={datasources}\n onLoadTables={onLoadTables ?? (async () => [])}\n onLoadSchema={onLoadSchema ?? (async () => [])}\n />\n )}\n </>\n )\n}\n\n// ============================================================================\n// Wrapper with ReactFlowProvider\n// ============================================================================\n\nexport function WorkflowCanvas(props: WorkflowCanvasProps) {\n return (\n <ReactFlowProvider>\n <WorkflowCanvasInner {...props} />\n </ReactFlowProvider>\n )\n}\n","import { createContext, useContext, useMemo } from 'react'\nimport type { AgentModel, AgentRule, WorkflowTool, Workflow, WorkflowGraph } from './contracts'\nimport type { AgentWithPrompts } from './types'\n\ntype WorkspaceBootstrapPayload = {\n workflow: Workflow | null\n graph: WorkflowGraph | null\n agents: AgentWithPrompts[]\n models: AgentModel[]\n tools: WorkflowTool[]\n rules: AgentRule[]\n}\n\ntype LambdaEnvelope<T> = {\n success: boolean\n data?: T\n error?: string\n}\n\ntype WorkflowBuilderClient = {\n publishableKey: string\n getWorkspaceBootstrap: (workflowId: string) => Promise<WorkspaceBootstrapPayload>\n}\n\ntype WorkflowBuilderProviderProps = {\n publishableKey: string\n children: React.ReactNode\n}\n\nfunction tryDecodeBase64Url(value: string): string | null {\n try {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')\n if (typeof atob === 'function') return atob(padded)\n } catch {\n return null\n }\n return null\n}\n\nfunction extractApiBaseFromPublishableKey(publishableKey: string): string | null {\n const directUrl = publishableKey.match(/https?:\\/\\/[^\\s|,;]+/i)?.[0]\n if (directUrl) return directUrl.replace(/\\/$/, '')\n\n const segments = publishableKey.split(/[.:_-]/).filter(Boolean)\n for (const segment of segments) {\n const decoded = tryDecodeBase64Url(segment)\n if (decoded && /^https?:\\/\\//i.test(decoded)) {\n return decoded.replace(/\\/$/, '')\n }\n }\n\n return null\n}\n\nfunction resolveWorkflowApiBaseUrl(publishableKey: string): string {\n const fromKey = extractApiBaseFromPublishableKey(publishableKey)\n if (fromKey) return fromKey\n throw new Error('Invalid publishable key: missing workflow API host.')\n}\n\nasync function fetchWorkflowApiData<T>(publishableKey: string, path: string): Promise<T> {\n const response = await fetch(`${resolveWorkflowApiBaseUrl(publishableKey)}${path}`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${publishableKey}`,\n 'X-Workflow-Key': publishableKey,\n 'Content-Type': 'application/json',\n },\n })\n\n const json = await response.json() as LambdaEnvelope<T>\n if (!response.ok || !json.success || !json.data) {\n throw new Error(json.error ?? `Workflow API request failed (${response.status})`)\n }\n return json.data\n}\n\nconst WorkflowBuilderContext = createContext<WorkflowBuilderClient | null>(null)\n\nexport function WorkflowBuilderProvider({\n publishableKey,\n children,\n}: WorkflowBuilderProviderProps) {\n const client = useMemo<WorkflowBuilderClient>(() => ({\n publishableKey,\n getWorkspaceBootstrap: async (workflowId: string) => {\n const [workflow, agents, models, tools, rules] = await Promise.all([\n fetchWorkflowApiData<Workflow>(publishableKey, `/workflows/${encodeURIComponent(workflowId)}`),\n fetchWorkflowApiData<Array<{ agentId: string; id?: string; name: string; order?: number }>>(publishableKey, '/agents/configs'),\n fetchWorkflowApiData<AgentModel[]>(publishableKey, '/agents/models'),\n fetchWorkflowApiData<WorkflowTool[]>(publishableKey, '/agents/tools'),\n fetchWorkflowApiData<AgentRule[]>(publishableKey, '/rules'),\n ])\n\n return {\n workflow,\n graph: workflow.graph ?? null,\n agents: agents.map((agent) => ({\n ...agent,\n promptCount: 0,\n activePromptVersion: 0,\n })),\n models,\n tools,\n rules,\n }\n },\n }), [publishableKey])\n\n return (\n <WorkflowBuilderContext.Provider value={client}>\n {children}\n </WorkflowBuilderContext.Provider>\n )\n}\n\nexport function useWorkflowBuilderClient(): WorkflowBuilderClient {\n const context = useContext(WorkflowBuilderContext)\n if (!context) {\n throw new Error('useWorkflowBuilderClient must be used within WorkflowBuilderProvider')\n }\n return context\n}\n\nexport function useWorkflowBuilderClientOptional(): WorkflowBuilderClient | null {\n return useContext(WorkflowBuilderContext)\n}\n\nexport type {\n WorkspaceBootstrapPayload,\n WorkflowBuilderClient,\n WorkflowBuilderProviderProps,\n}\n","import { useEffect, useMemo, useState, type ComponentProps } from 'react'\nimport { I18nProvider, createI18nFromMessages } from '@ui/lib/i18n-context'\nimport { WorkflowCanvas as BuilderWorkflowCanvas } from './components/canvas/workflow-canvas'\nimport { useWorkflowBuilderClientOptional } from './workflow-provider'\nimport type { WorkflowGraph } from './contracts'\n\ntype BuilderCanvasProps = ComponentProps<typeof BuilderWorkflowCanvas>\n\nexport type WorkspaceProps = {\n locale?: string\n messages?: Record<string, unknown>\n className?: string\n workflowId?: string\n} & Partial<BuilderCanvasProps>\n\nexport function Workspace({\n locale = 'en',\n messages = {},\n className,\n workflowId,\n ...canvasProps\n}: WorkspaceProps) {\n const workflowBuilderClient = useWorkflowBuilderClientOptional()\n const [bootstrapGraph, setBootstrapGraph] = useState<WorkflowGraph | null>(null)\n const [bootstrapAgents, setBootstrapAgents] = useState<NonNullable<BuilderCanvasProps['agents']>>([])\n const [bootstrapModels, setBootstrapModels] = useState<NonNullable<BuilderCanvasProps['models']>>([])\n const [bootstrapTools, setBootstrapTools] = useState<NonNullable<BuilderCanvasProps['tools']>>([])\n const [bootstrapRules, setBootstrapRules] = useState<NonNullable<BuilderCanvasProps['rules']>>([])\n\n const shouldBootstrapFromProvider = useMemo(\n () => Boolean(workflowId && (!canvasProps.agents || !canvasProps.models)),\n [workflowId, canvasProps.agents, canvasProps.models],\n )\n\n useEffect(() => {\n if (!shouldBootstrapFromProvider || !workflowId || !workflowBuilderClient) {\n return\n }\n\n void workflowBuilderClient.getWorkspaceBootstrap(workflowId)\n .then((payload) => {\n setBootstrapGraph(payload.graph)\n setBootstrapAgents(payload.agents)\n setBootstrapModels(payload.models)\n setBootstrapTools(payload.tools)\n setBootstrapRules(payload.rules)\n })\n .catch(() => {\n // Keep previous behavior/style: render canvas with existing props on bootstrap failures.\n })\n }, [shouldBootstrapFromProvider, workflowId, workflowBuilderClient])\n\n const resolvedGraph = canvasProps.initialGraph ?? bootstrapGraph\n const resolvedAgents = canvasProps.agents ?? bootstrapAgents\n const resolvedModels = canvasProps.models ?? bootstrapModels\n const resolvedTools = canvasProps.tools ?? bootstrapTools\n const resolvedRules = canvasProps.rules ?? bootstrapRules\n\n return (\n <div className={className ?? 'h-full w-full'}>\n <I18nProvider value={createI18nFromMessages(locale, messages as Record<string, unknown>)}>\n <BuilderWorkflowCanvas\n {...canvasProps}\n initialGraph={resolvedGraph}\n agents={resolvedAgents}\n models={resolvedModels}\n tools={resolvedTools}\n rules={resolvedRules}\n />\n </I18nProvider>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/astrlabe/store/workflow-store.ts","../src/astrlabe/store/modal-store.ts","../src/astrlabe/constants/workflow-constants.ts","../src/astrlabe/components/canvas/edge-insert-popup.tsx","../src/astrlabe/components/canvas/conditional-edge.tsx","../src/astrlabe/components/canvas/custom-connection-line.tsx","../src/astrlabe/components/canvas/draggable-command-bar.tsx","../src/astrlabe/constants/entity-colors.ts","../src/astrlabe/components/config-forms/datasource-node-config-form.tsx","../src/astrlabe/components/icons/agent-framework-icons.tsx","../src/astrlabe/components/nodes/node-card.tsx","../src/astrlabe/components/nodes/node-card-primitives.tsx","../src/astrlabe/components/nodes/node-handles.tsx","../src/astrlabe/components/nodes/node-running-indicator.tsx","../src/astrlabe/components/nodes/agent-flow-node.tsx","../src/astrlabe/components/nodes/agent-tool-flow-node.tsx","../src/astrlabe/components/nodes/tool-flow-node.tsx","../src/astrlabe/components/nodes/rule-flow-node.tsx","../src/astrlabe/components/nodes/entity-flow-node.tsx","../src/astrlabe/components/nodes/start-flow-node.tsx","../src/astrlabe/components/nodes/end-flow-node.tsx","../src/astrlabe/components/nodes/if-else-flow-node.tsx","../src/astrlabe/components/nodes/code-flow-node.tsx","../src/astrlabe/components/nodes/http-request-flow-node.tsx","../src/astrlabe/components/nodes/template-transform-flow-node.tsx","../src/astrlabe/components/nodes/iteration-flow-node.tsx","../src/astrlabe/components/nodes/knowledge-base-flow-node.tsx","../src/astrlabe/components/nodes/answer-flow-node.tsx","../src/astrlabe/components/nodes/question-classifier-flow-node.tsx","../src/astrlabe/components/nodes/parameter-extractor-flow-node.tsx","../src/astrlabe/components/nodes/variable-assigner-flow-node.tsx","../src/astrlabe/components/nodes/variable-aggregator-flow-node.tsx","../src/astrlabe/components/nodes/document-extractor-flow-node.tsx","../src/astrlabe/components/nodes/list-operator-flow-node.tsx","../src/astrlabe/components/nodes/iteration-start-flow-node.tsx","../src/astrlabe/components/nodes/note-flow-node.tsx","../src/astrlabe/components/nodes/datasource-flow-node.tsx","../src/astrlabe/components/nodes/group-flow-node.tsx","../src/astrlabe/components/nodes/audio-input-flow-node.tsx","../src/astrlabe/components/nodes/speech-transcriber-flow-node.tsx","../src/astrlabe/components/nodes/dashboard-output-flow-node.tsx","../src/astrlabe/components/config-forms/config-form-actions.tsx","../src/astrlabe/components/config-forms/variable-list-editor.tsx","../src/astrlabe/components/config-forms/start-node-config-form.tsx","../src/astrlabe/components/config-forms/end-node-config-form.tsx","../src/astrlabe/components/config-forms/if-else-node-config-form.tsx","../src/astrlabe/components/config-forms/code-node-config-form.tsx","../src/astrlabe/components/config-forms/http-request-node-config-form.tsx","../src/astrlabe/components/config-forms/s3-write-node-config-form.tsx","../src/astrlabe/components/config-forms/template-transform-node-config-form.tsx","../src/astrlabe/components/config-forms/iteration-node-config-form.tsx","../src/astrlabe/components/config-forms/knowledge-base-node-config-form.tsx","../src/astrlabe/components/config-forms/answer-node-config-form.tsx","../src/astrlabe/components/config-forms/question-classifier-node-config-form.tsx","../src/astrlabe/components/config-forms/parameter-extractor-node-config-form.tsx","../src/astrlabe/components/config-forms/variable-assigner-node-config-form.tsx","../src/astrlabe/components/config-forms/variable-aggregator-node-config-form.tsx","../src/astrlabe/components/config-forms/document-extractor-node-config-form.tsx","../src/astrlabe/components/config-forms/list-operator-node-config-form.tsx","../src/astrlabe/components/config-forms/iteration-start-node-config-form.tsx","../src/astrlabe/components/config-forms/entity-node-config-form.tsx","../src/astrlabe/components/config-forms/group-node-config-form.tsx","../src/astrlabe/components/config-forms/rule-node-config-form.tsx","../src/astrlabe/components/config-forms/agent-node-config-form.tsx","../src/astrlabe/components/config-forms/audio-input-node-config-form.tsx","../src/astrlabe/components/config-forms/speech-transcriber-node-config-form.tsx","../src/astrlabe/components/config-forms/dashboard-output-node-config-form.tsx","../src/astrlabe/components/modals/logic-node-modal.tsx","../src/astrlabe/components/context-menus/node-context-menu.tsx","../src/astrlabe/components/context-menus/panel-context-menu.tsx","../src/astrlabe/components/context-menus/selection-context-menu.tsx","../src/astrlabe/components/canvas/workflow-canvas.tsx","../src/astrlabe/workflow-provider.tsx","../src/astrlabe/workflow-canvas.tsx"],"names":["create","useState","useRef","useCallback","jsxs","jsx","memo","getBezierPath","DraggableCommandBar","useEffect","ArrowsRightLeftIcon","CircleStackIcon","logo","ServerStackIcon","PlusIcon","XMarkIcon","Fragment","useMemo","AgentFlowNode","Position","CommandLineIcon","TrashIcon","AgentToolFlowNode","ExclamationTriangleIcon","ToolFlowNode","WrenchScrewdriverIcon","RuleFlowNode","EntityFlowNode","StartFlowNode","PlayIcon","EndFlowNode","StopIcon","IfElseFlowNode","ArrowsPointingOutIcon","CodeFlowNode","CodeBracketIcon","HttpRequestFlowNode","GlobeAltIcon","TemplateTransformFlowNode","DocumentTextIcon","IterationFlowNode","ArrowPathIcon","KnowledgeBaseFlowNode","BookOpenIcon","AnswerFlowNode","ChatBubbleLeftRightIcon","QuestionClassifierFlowNode","QuestionMarkCircleIcon","ParameterExtractorFlowNode","AdjustmentsVerticalIcon","VariableAssignerFlowNode","VariableAggregatorFlowNode","Square3Stack3DIcon","DocumentExtractorFlowNode","DocumentMagnifyingGlassIcon","ListOperatorFlowNode","ListBulletIcon","IterationStartFlowNode","PlayCircleIcon","NoteFlowNode","PencilSquareIcon","DATASOURCE_LOGOS","getDatasourceLogo","DatasourceFlowNode","GroupFlowNode","RectangleGroupIcon","AudioInputFlowNode","MicrophoneIcon","SpeechTranscriberFlowNode","SpeakerWaveIcon","DashboardOutputFlowNode","ChartBarIcon","OPERATION_OPTIONS","CursorArrowRaysIcon","ClipboardDocumentIcon","DocumentDuplicateIcon","useReactFlow"],"mappings":"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","file":"chunk-EAIE4QGD.mjs","sourcesContent":["/**\n * Workflow Builder Store (Zustand)\n * ================================\n * Central state management for the workflow canvas.\n * Handles nodes, edges, undo/redo history, clipboard,\n * editing state, context menus, and run results.\n */\n\nimport { create } from 'zustand'\nimport type { Node, Edge } from '@xyflow/react'\n\ntype GraphSnapshot = { nodes: Node[]; edges: Edge[] }\n\nexport type CanvasControlMode = 'pointer' | 'hand'\n\ntype ContextMenuState = {\n type: 'node' | 'edge' | 'panel'\n position: { x: number; y: number }\n targetId?: string\n} | null\n\nexport type NodeRunResult = {\n status: 'pending' | 'running' | 'success' | 'error'\n data?: unknown\n error?: string\n durationMs?: number\n}\n\nimport type { LayoutDirection } from '../utils/layout-engine'\n\ntype WorkflowStoreState = {\n nodes: Node[]\n edges: Edge[]\n past: GraphSnapshot[]\n future: GraphSnapshot[]\n clipboard: GraphSnapshot | null\n editingNodeId: string | null\n contextMenu: ContextMenuState\n controlMode: CanvasControlMode\n layoutDirection: LayoutDirection\n showVariableInspector: boolean\n showVersionHistory: boolean\n showRunPanel: boolean\n showMinimap: boolean\n showDots: boolean\n showShortcuts: boolean\n cardDisplayMode: 'detailed' | 'compact'\n isRunning: boolean\n nodeResults: Record<string, NodeRunResult>\n selectedRunId: string | null\n previewPanelOpen: boolean\n}\n\ntype WorkflowStoreActions = {\n setNodes: (updater: Node[] | ((nodes: Node[]) => Node[])) => void\n setEdges: (updater: Edge[] | ((edges: Edge[]) => Edge[])) => void\n takeSnapshot: () => void\n undo: () => void\n redo: () => void\n copy: () => void\n paste: (offset?: number) => void\n selectAll: () => void\n deselectAll: () => void\n setEditingNodeId: (nodeId: string | null) => void\n setContextMenu: (menu: ContextMenuState) => void\n setControlMode: (mode: CanvasControlMode) => void\n setLayoutDirection: (direction: LayoutDirection) => void\n toggleVariableInspector: () => void\n toggleVersionHistory: () => void\n toggleRunPanel: () => void\n toggleMinimap: () => void\n toggleDots: () => void\n toggleShortcuts: () => void\n closeShortcuts: () => void\n toggleCardDisplayMode: () => void\n setIsRunning: (running: boolean) => void\n setNodeResult: (nodeId: string, result: NodeRunResult) => void\n clearNodeResults: () => void\n setSelectedRunId: (runId: string | null) => void\n togglePreviewPanel: () => void\n reset: () => void\n}\n\nexport type WorkflowStore = WorkflowStoreState & WorkflowStoreActions\n\nconst MAX_HISTORY_SIZE = 50\nconst DEFAULT_PASTE_OFFSET = 40\n\nexport const useWorkflowStore = create<WorkflowStore>((set, get) => ({\n // ──────────────────────────────────────────────────────────────────────────\n // State\n // ──────────────────────────────────────────────────────────────────────────\n\n nodes: [],\n edges: [],\n past: [],\n future: [],\n clipboard: null,\n editingNodeId: null,\n contextMenu: null,\n controlMode: 'pointer' as CanvasControlMode,\n layoutDirection: 'free' as LayoutDirection,\n showVariableInspector: false,\n showVersionHistory: false,\n showRunPanel: false,\n showMinimap: true,\n showDots: true,\n showShortcuts: false,\n cardDisplayMode: 'detailed' as const,\n isRunning: false,\n nodeResults: {},\n selectedRunId: null,\n previewPanelOpen: false,\n\n // ──────────────────────────────────────────────────────────────────────────\n // Actions\n // ──────────────────────────────────────────────────────────────────────────\n\n setNodes: (updater) => {\n set((state) => ({\n nodes: typeof updater === 'function' ? updater(state.nodes) : updater,\n }))\n },\n\n setEdges: (updater) => {\n set((state) => ({\n edges: typeof updater === 'function' ? updater(state.edges) : updater,\n }))\n },\n\n takeSnapshot: () => {\n const { nodes, edges, past } = get()\n const snapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n const trimmedPast = past.slice(-(MAX_HISTORY_SIZE - 1))\n set({\n past: [...trimmedPast, snapshot],\n future: [],\n })\n },\n\n undo: () => {\n const { past, nodes, edges } = get()\n if (past.length === 0) return\n\n const previous = past[past.length - 1]\n const remainingPast = past.slice(0, -1)\n\n const currentSnapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n\n set((state) => ({\n nodes: previous.nodes,\n edges: previous.edges,\n past: remainingPast,\n future: [...state.future, currentSnapshot],\n }))\n },\n\n redo: () => {\n const { future, nodes, edges } = get()\n if (future.length === 0) return\n\n const next = future[future.length - 1]\n const remainingFuture = future.slice(0, -1)\n\n const currentSnapshot: GraphSnapshot = {\n nodes: nodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: edges.map((edge) => ({ ...edge })),\n }\n\n set((state) => ({\n nodes: next.nodes,\n edges: next.edges,\n future: remainingFuture,\n past: [...state.past, currentSnapshot],\n }))\n },\n\n copy: () => {\n const { nodes, edges } = get()\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length === 0) return\n\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n const internalEdges = edges.filter(\n (edge) => selectedNodeIds.has(edge.source) && selectedNodeIds.has(edge.target),\n )\n\n set({\n clipboard: {\n nodes: selectedNodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: internalEdges.map((edge) => ({ ...edge })),\n },\n })\n },\n\n paste: (offset = DEFAULT_PASTE_OFFSET) => {\n const { clipboard } = get()\n if (!clipboard || clipboard.nodes.length === 0) return\n\n get().takeSnapshot()\n\n const idMapping = new Map<string, string>()\n for (const node of clipboard.nodes) {\n idMapping.set(node.id, crypto.randomUUID())\n }\n\n const pastedNodes: Node[] = clipboard.nodes.map((node) => ({\n ...node,\n id: idMapping.get(node.id) ?? crypto.randomUUID(),\n position: {\n x: node.position.x + offset,\n y: node.position.y + offset,\n },\n selected: true,\n data: { ...node.data },\n }))\n\n const pastedEdges: Edge[] = clipboard.edges.map((edge) => ({\n ...edge,\n id: crypto.randomUUID(),\n source: idMapping.get(edge.source) ?? edge.source,\n target: idMapping.get(edge.target) ?? edge.target,\n }))\n\n set((state) => ({\n nodes: [\n ...state.nodes.map((node) => ({ ...node, selected: false })),\n ...pastedNodes,\n ],\n edges: [...state.edges, ...pastedEdges],\n clipboard: {\n nodes: pastedNodes.map((node) => ({ ...node, data: { ...node.data } })),\n edges: pastedEdges.map((edge) => ({ ...edge })),\n },\n }))\n },\n\n selectAll: () => {\n set((state) => ({\n nodes: state.nodes.map((node) => ({ ...node, selected: true })),\n }))\n },\n\n deselectAll: () => {\n set((state) => ({\n nodes: state.nodes.map((node) => ({ ...node, selected: false })),\n }))\n },\n\n setEditingNodeId: (nodeId) => {\n set({ editingNodeId: nodeId })\n },\n\n setContextMenu: (menu) => {\n set({ contextMenu: menu })\n },\n\n setControlMode: (mode) => {\n set({ controlMode: mode })\n },\n\n setLayoutDirection: (direction) => {\n set({ layoutDirection: direction })\n },\n\n toggleVariableInspector: () => {\n set((state) => ({ showVariableInspector: !state.showVariableInspector }))\n },\n\n toggleVersionHistory: () => {\n set((state) => ({ showVersionHistory: !state.showVersionHistory }))\n },\n\n toggleRunPanel: () => {\n set((state) => ({ showRunPanel: !state.showRunPanel }))\n },\n\n toggleMinimap: () => {\n set((state) => ({ showMinimap: !state.showMinimap }))\n },\n\n toggleDots: () => {\n set((state) => ({ showDots: !state.showDots }))\n },\n\n toggleShortcuts: () => {\n set((state) => ({ showShortcuts: !state.showShortcuts }))\n },\n\n closeShortcuts: () => {\n set({ showShortcuts: false })\n },\n\n toggleCardDisplayMode: () => {\n set((state) => ({ cardDisplayMode: state.cardDisplayMode === 'detailed' ? 'compact' : 'detailed' }))\n },\n\n setIsRunning: (running) => {\n set({ isRunning: running })\n },\n\n setNodeResult: (nodeId, result) => {\n set((state) => ({\n nodeResults: { ...state.nodeResults, [nodeId]: result },\n }))\n },\n\n clearNodeResults: () => {\n set({ nodeResults: {}, isRunning: false })\n },\n\n setSelectedRunId: (runId) => {\n set({ selectedRunId: runId })\n },\n\n togglePreviewPanel: () => {\n set((state) => ({ previewPanelOpen: !state.previewPanelOpen }))\n },\n\n reset: () => {\n set({\n nodes: [],\n edges: [],\n past: [],\n future: [],\n clipboard: null,\n editingNodeId: null,\n contextMenu: null,\n controlMode: 'pointer' as CanvasControlMode,\n showVariableInspector: false,\n showVersionHistory: false,\n showRunPanel: false,\n showMinimap: true,\n showDots: true,\n showShortcuts: false,\n cardDisplayMode: 'detailed' as const,\n isRunning: false,\n nodeResults: {},\n selectedRunId: null,\n previewPanelOpen: false,\n })\n },\n}))\n","/**\n * Modal Store (Zustand)\n * ======================\n * Stack-based modal management. Opening a new modal pushes it onto the stack\n * (preserving the previous modal behind it). Closing pops the stack and\n * restores the previous modal. This enables flows like:\n * Canvas → Agent Modal → Workflow Tool Modal (agent stays behind)\n */\n\nimport { create } from 'zustand'\nimport type { AgentWithPrompts } from '../types'\nimport type { AgentModel, AgentTool, LogicNodeConfig } from '../contracts'\nimport type { ModelProvider } from '../components/panels/node-palette'\n\ntype ModalType = 'agent' | 'logic-node' | 'pipeline-settings' | null\n\ntype AgentModalData = {\n agent: AgentWithPrompts\n models: AgentModel[]\n /** Available agent tools the agent can use */\n agentTools?: AgentTool[]\n /** Available model providers for credential config */\n modelProviders?: ModelProvider[]\n isCreateMode: boolean\n}\n\ntype LogicNodeModalData = {\n nodeId: string\n nodeLabel: string\n config: LogicNodeConfig\n}\n\ntype PipelineSettingsModalData = {\n name: string\n description: string\n /** Optional — populated when opening the modal against an already-\n * loaded workflow so admins can archive / flip draft state without\n * closing the modal. Callers that don't care about lifecycle (e.g.\n * create-from-dialog flows) can leave these out. */\n slug?: string | null\n isDraft?: boolean\n isActive?: boolean\n}\n\ntype ModalEntry = {\n type: ModalType\n agentData: AgentModalData | null\n logicNodeData: LogicNodeModalData | null\n pipelineSettingsData: PipelineSettingsModalData | null\n}\n\ntype ModalStoreState = {\n /** Current active modal (top of stack) */\n activeModal: ModalType\n agentData: AgentModalData | null\n logicNodeData: LogicNodeModalData | null\n pipelineSettingsData: PipelineSettingsModalData | null\n /** Stack of previous modals (for back-navigation) */\n stack: ModalEntry[]\n}\n\ntype ModalStoreActions = {\n openAgentModal: (agent: AgentWithPrompts, models: AgentModel[], isCreateMode?: boolean, agentTools?: AgentTool[], modelProviders?: ModelProvider[]) => void\n openLogicNodeModal: (nodeId: string, nodeLabel: string, config: LogicNodeConfig) => void\n openPipelineSettingsModal: (\n name: string,\n description: string,\n lifecycle?: { slug?: string | null; isDraft?: boolean; isActive?: boolean },\n ) => void\n /** Close current modal. If stack has entries, restores the previous modal. */\n closeModal: () => void\n /** Close all modals and clear the stack. */\n closeAllModals: () => void\n}\n\nexport type ModalStore = ModalStoreState & ModalStoreActions\n\nconst EMPTY_STATE: Pick<ModalStoreState, 'activeModal' | 'agentData' | 'logicNodeData' | 'pipelineSettingsData'> = {\n activeModal: null,\n agentData: null,\n logicNodeData: null,\n pipelineSettingsData: null,\n}\n\nexport const useModalStore = create<ModalStore>((set, get) => ({\n ...EMPTY_STATE,\n stack: [],\n\n openAgentModal: (agent, models, isCreateMode = false, agentTools, modelProviders) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'agent',\n agentData: { agent, models, isCreateMode, agentTools, modelProviders },\n logicNodeData: null,\n pipelineSettingsData: null,\n stack: newStack,\n })\n },\n\n openLogicNodeModal: (nodeId, nodeLabel, config) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'logic-node',\n logicNodeData: { nodeId, nodeLabel, config },\n agentData: null,\n pipelineSettingsData: null,\n stack: newStack,\n })\n },\n\n openPipelineSettingsModal: (name, description, lifecycle) => {\n const current = get()\n const entry: ModalEntry = {\n type: current.activeModal,\n agentData: current.agentData,\n logicNodeData: current.logicNodeData,\n pipelineSettingsData: current.pipelineSettingsData,\n }\n const newStack = current.activeModal ? [...current.stack, entry] : current.stack\n set({\n activeModal: 'pipeline-settings',\n pipelineSettingsData: {\n name,\n description,\n slug: lifecycle?.slug,\n isDraft: lifecycle?.isDraft,\n isActive: lifecycle?.isActive,\n },\n agentData: null,\n logicNodeData: null,\n stack: newStack,\n })\n },\n\n closeModal: () => {\n const { stack } = get()\n if (stack.length > 0) {\n // Pop the stack — restore previous modal\n const previous = stack[stack.length - 1]\n set({\n activeModal: previous.type,\n agentData: previous.agentData,\n logicNodeData: previous.logicNodeData,\n pipelineSettingsData: previous.pipelineSettingsData,\n stack: stack.slice(0, -1),\n })\n } else {\n // No stack — close everything\n set({ ...EMPTY_STATE, stack: [] })\n }\n },\n\n closeAllModals: () => {\n set({ ...EMPTY_STATE, stack: [] })\n },\n}))\n","import {\n CloudIcon,\n ChartBarIcon,\n NewspaperIcon,\n WrenchScrewdriverIcon,\n PlayIcon,\n StopIcon,\n ArrowsPointingOutIcon,\n CodeBracketIcon,\n GlobeAltIcon,\n DocumentTextIcon,\n ArrowPathIcon,\n BookOpenIcon,\n ChatBubbleLeftRightIcon,\n QuestionMarkCircleIcon,\n AdjustmentsVerticalIcon,\n ArrowsRightLeftIcon,\n Square3Stack3DIcon,\n DocumentMagnifyingGlassIcon,\n ListBulletIcon,\n PlayCircleIcon,\n PencilSquareIcon,\n CircleStackIcon,\n RectangleGroupIcon,\n ServerStackIcon,\n KeyIcon,\n CloudArrowUpIcon,\n MicrophoneIcon,\n SpeakerWaveIcon,\n} from '@heroicons/react/24/outline'\n\nexport const GRAPH_ACTIVE_EDGE_COLOR = '#14b8a6'\nexport const GRAPH_TRUE_EDGE_COLOR = '#22c55e'\nexport const GRAPH_FALSE_EDGE_COLOR = '#ef4444'\nexport const GRAPH_RULE_EDGE_COLOR = '#8b5cf6'\n\nexport const ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n CloudIcon,\n ChartBarIcon,\n NewspaperIcon,\n WrenchScrewdriverIcon,\n}\n\nexport const CATEGORY_COLORS: Record<string, string> = {\n market: 'from-emerald-400 to-green-500',\n data: 'from-blue-400 to-cyan-500',\n compliance: 'from-purple-400 to-violet-500',\n external: 'from-gray-400 to-gray-500',\n}\n\nexport const CATEGORY_PILL_COLORS: Record<string, string> = {\n market: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n data: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n compliance: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n external: 'bg-gray-100 text-gray-700 dark:bg-white/10 dark:text-gray-300',\n}\n\nexport const ADJUSTMENT_GRADIENT: Record<string, string> = {\n percentage: 'from-purple-400 to-violet-500',\n fixed: 'from-blue-400 to-cyan-500',\n formula: 'from-amber-400 to-orange-500',\n}\n\nexport const ADJUSTMENT_PILL: Record<string, string> = {\n percentage: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n fixed: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n formula: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n}\n\n// ============================================================================\n// Logic Node Constants (Dify-inspired pipeline control nodes)\n// ============================================================================\n\nexport const LOGIC_NODE_GRADIENTS: Record<string, string> = {\n start: 'from-green-400 to-emerald-500',\n end: 'from-red-400 to-rose-500',\n if_else: 'from-amber-400 to-orange-500',\n code: 'from-cyan-400 to-sky-500',\n http_request: 'from-orange-400 to-amber-500',\n s3_write: 'from-cyan-400 to-cyan-500',\n template_transform: 'from-pink-400 to-rose-500',\n iteration: 'from-indigo-400 to-violet-500',\n knowledge_base: 'from-emerald-400 to-teal-500',\n answer: 'from-blue-400 to-indigo-500',\n question_classifier: 'from-purple-400 to-fuchsia-500',\n parameter_extractor: 'from-emerald-400 to-green-500',\n variable_assigner: 'from-sky-400 to-blue-500',\n variable_aggregator: 'from-violet-400 to-purple-500',\n document_extractor: 'from-rose-400 to-pink-500',\n list_operator: 'from-lime-400 to-green-500',\n iteration_start: 'from-indigo-400 to-blue-500',\n note: 'from-yellow-400 to-amber-500',\n entity: 'from-blue-400 to-cyan-500',\n datasource: 'from-cyan-500 to-blue-600',\n model_provider: 'from-slate-500 to-gray-600',\n dashboard_output: 'from-fuchsia-500 to-pink-600',\n group: 'from-slate-400 to-gray-500',\n audio_input: 'from-teal-400 to-cyan-500',\n speech_transcriber: 'from-violet-500 to-purple-600',\n}\n\nexport const LOGIC_NODE_BADGE_COLORS: Record<string, string> = {\n start: 'bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300',\n end: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n if_else: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n code: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n http_request: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n s3_write: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n template_transform: 'bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300',\n iteration: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n knowledge_base: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n answer: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n question_classifier: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n parameter_extractor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n variable_assigner: 'bg-sky-100 text-sky-700 dark:bg-sky-500/20 dark:text-sky-300',\n variable_aggregator: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n document_extractor: 'bg-rose-100 text-rose-700 dark:bg-rose-500/20 dark:text-rose-300',\n list_operator: 'bg-lime-100 text-lime-700 dark:bg-lime-500/20 dark:text-lime-300',\n iteration_start: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n note: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-500/20 dark:text-yellow-300',\n entity: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n datasource: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n model_provider: 'bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300',\n dashboard_output: 'bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-500/20 dark:text-fuchsia-300',\n group: 'bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300',\n audio_input: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n speech_transcriber: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n}\n\nexport const LOGIC_NODE_BADGE_SOFT_COLORS: Record<string, string> = {\n start: 'bg-green-50 text-green-600 dark:bg-green-500/20 dark:text-green-400',\n end: 'bg-red-50 text-red-600 dark:bg-red-500/20 dark:text-red-400',\n if_else: 'bg-amber-50 text-amber-600 dark:bg-amber-500/20 dark:text-amber-400',\n code: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n http_request: 'bg-orange-50 text-orange-600 dark:bg-orange-500/20 dark:text-orange-400',\n s3_write: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n template_transform: 'bg-pink-50 text-pink-600 dark:bg-pink-500/20 dark:text-pink-400',\n iteration: 'bg-indigo-50 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400',\n knowledge_base: 'bg-emerald-50 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400',\n answer: 'bg-blue-50 text-blue-600 dark:bg-blue-500/20 dark:text-blue-400',\n question_classifier: 'bg-purple-50 text-purple-600 dark:bg-purple-500/20 dark:text-purple-400',\n parameter_extractor: 'bg-emerald-50 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400',\n variable_assigner: 'bg-sky-50 text-sky-600 dark:bg-sky-500/20 dark:text-sky-400',\n variable_aggregator: 'bg-violet-50 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400',\n document_extractor: 'bg-rose-50 text-rose-600 dark:bg-rose-500/20 dark:text-rose-400',\n list_operator: 'bg-lime-50 text-lime-600 dark:bg-lime-500/20 dark:text-lime-400',\n iteration_start: 'bg-indigo-50 text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-400',\n note: 'bg-yellow-50 text-yellow-600 dark:bg-yellow-500/20 dark:text-yellow-400',\n entity: 'bg-blue-50 text-blue-600 dark:bg-blue-500/20 dark:text-blue-400',\n datasource: 'bg-cyan-50 text-cyan-600 dark:bg-cyan-500/20 dark:text-cyan-400',\n model_provider: 'bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400',\n dashboard_output: 'bg-fuchsia-50 text-fuchsia-600 dark:bg-fuchsia-500/20 dark:text-fuchsia-400',\n group: 'bg-slate-50 text-slate-600 dark:bg-slate-500/20 dark:text-slate-400',\n audio_input: 'bg-teal-50 text-teal-600 dark:bg-teal-500/20 dark:text-teal-400',\n speech_transcriber: 'bg-violet-50 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400',\n}\n\nexport const LOGIC_ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n start: PlayIcon,\n end: StopIcon,\n if_else: ArrowsPointingOutIcon,\n code: CodeBracketIcon,\n http_request: GlobeAltIcon,\n s3_write: CloudArrowUpIcon,\n template_transform: DocumentTextIcon,\n iteration: ArrowPathIcon,\n knowledge_base: BookOpenIcon,\n answer: ChatBubbleLeftRightIcon,\n question_classifier: QuestionMarkCircleIcon,\n parameter_extractor: AdjustmentsVerticalIcon,\n variable_assigner: ArrowsRightLeftIcon,\n variable_aggregator: Square3Stack3DIcon,\n document_extractor: DocumentMagnifyingGlassIcon,\n list_operator: ListBulletIcon,\n iteration_start: PlayCircleIcon,\n note: PencilSquareIcon,\n entity: CircleStackIcon,\n datasource: ServerStackIcon,\n model_provider: KeyIcon,\n dashboard_output: ChartBarIcon,\n group: RectangleGroupIcon,\n audio_input: MicrophoneIcon,\n speech_transcriber: SpeakerWaveIcon,\n}\n\n// ============================================================================\n// Node Selection / Hover State Classes\n// ============================================================================\n\n/** Workflow node types whose Rust executor is still a stub / no-op today.\n * These are hidden from the palette by default and surfaced with a warning\n * in their config modal so authors know the node won't run end-to-end yet.\n * Per-node opt-in (e.g. via org settings) replaces the previous global\n * \"Show experimental\" palette toggle. */\nexport const EXPERIMENTAL_NODE_TYPES: ReadonlySet<string> = new Set([\n 'document_extractor',\n 'knowledge_base',\n])\n\nexport function isExperimentalNodeType(nodeType: string | undefined | null): boolean {\n return !!nodeType && EXPERIMENTAL_NODE_TYPES.has(nodeType)\n}\n\n/** Classes applied when a node is selected (click or programmatic selection).\n * Uses a CSS class (.node-card-selected) to override liquid-surface borders. */\nexport const NODE_SELECTED_CLASS = 'node-card-selected'\n\n/** Classes applied on hover when a node is NOT selected.\n * Uses a CSS class (.node-card-hover) to override liquid-surface borders. */\nexport const NODE_HOVER_CLASS = 'node-card-hover'\n\n/** Static border color per node type (light + dark, non-selected, non-hovered) */\nexport const NODE_BORDER_COLORS: Record<string, string> = {\n agent: 'border-gray-300/50 dark:border-gray-600/50',\n tool: 'border-gray-300/50 dark:border-gray-600/50',\n agent_tool: 'border-amber-300/50 dark:border-amber-600/50',\n entity: 'border-gray-300/50 dark:border-gray-600/50',\n rule: 'border-gray-300/50 dark:border-gray-600/50',\n start: 'border-green-300/50 dark:border-green-600/50',\n end: 'border-red-300/50 dark:border-red-600/50',\n if_else: 'border-amber-300/50 dark:border-amber-600/50',\n code: 'border-cyan-300/50 dark:border-cyan-600/50',\n http_request: 'border-orange-300/50 dark:border-orange-600/50',\n s3_write: 'border-cyan-300/50 dark:border-cyan-600/50',\n template_transform: 'border-pink-300/50 dark:border-pink-600/50',\n iteration: 'border-indigo-300/50 dark:border-indigo-600/50',\n iteration_start: 'border-indigo-300/50 dark:border-indigo-600/50',\n knowledge_base: 'border-emerald-300/50 dark:border-emerald-600/50',\n answer: 'border-blue-300/50 dark:border-blue-600/50',\n question_classifier: 'border-purple-300/50 dark:border-purple-600/50',\n parameter_extractor: 'border-emerald-300/50 dark:border-emerald-600/50',\n variable_assigner: 'border-sky-300/50 dark:border-sky-600/50',\n variable_aggregator: 'border-violet-300/50 dark:border-violet-600/50',\n document_extractor: 'border-rose-300/50 dark:border-rose-600/50',\n list_operator: 'border-lime-300/50 dark:border-lime-600/50',\n note: 'border-gray-200/50 dark:border-gray-700/50',\n datasource: 'border-cyan-300/50 dark:border-cyan-600/50',\n model_provider: 'border-slate-300/50 dark:border-slate-600/50',\n audio_input: 'border-teal-300/50 dark:border-teal-600/50',\n speech_transcriber: 'border-violet-300/50 dark:border-violet-600/50',\n}\n\n/**\n * Returns the border + ring classes for a node based on its selected state.\n * Usage: `getNodeStateClass(selected, 'agent')`\n * Or with a custom border: `getNodeStateClass(selected, undefined, 'border-slate-300/50 dark:border-slate-600/50')`\n */\nexport function getNodeStateClass(\n selected: boolean | undefined,\n nodeType?: string,\n customBorder?: string,\n): string {\n if (selected) return NODE_SELECTED_CLASS\n const border = customBorder ?? (nodeType ? NODE_BORDER_COLORS[nodeType] : undefined) ?? NODE_BORDER_COLORS.agent\n return `${border} ${NODE_HOVER_CLASS}`\n}\n\n// ============================================================================\n// MiniMap Node Colors (used by MiniMap component on the canvas)\n// ============================================================================\n\nexport const MINIMAP_NODE_COLORS: Record<string, string> = {\n agent: '#6366f1',\n tool: '#14b8a6',\n agent_tool: '#f59e0b',\n rule: '#8b5cf6',\n start: '#22c55e',\n end: '#ef4444',\n if_else: '#f59e0b',\n code: '#06b6d4',\n http_request: '#f97316',\n s3_write: '#06b6d4',\n template_transform: '#ec4899',\n iteration: '#818cf8',\n knowledge_base: '#10b981',\n answer: '#3b82f6',\n question_classifier: '#a855f7',\n parameter_extractor: '#10b981',\n variable_assigner: '#0ea5e9',\n variable_aggregator: '#8b5cf6',\n document_extractor: '#f43f5e',\n list_operator: '#84cc16',\n iteration_start: '#6366f1',\n note: '#eab308',\n entity: '#3b82f6',\n datasource: '#06b6d4',\n model_provider: '#64748b',\n group: '#64748b',\n}\n\nexport const NODE_EXECUTION_ACCENT_COLORS: Record<string, string> = {\n ...MINIMAP_NODE_COLORS,\n}\n\nfunction hexToRgb(hexColor: string): [number, number, number] {\n const normalizedHex = hexColor.replace('#', '')\n const parsed = Number.parseInt(normalizedHex, 16)\n\n if (Number.isNaN(parsed) || normalizedHex.length !== 6) {\n return [99, 102, 241]\n }\n\n return [(parsed >> 16) & 255, (parsed >> 8) & 255, parsed & 255]\n}\n\nexport function getNodeExecutionAccent(nodeType?: string): string {\n return NODE_EXECUTION_ACCENT_COLORS[nodeType ?? ''] ?? NODE_EXECUTION_ACCENT_COLORS.agent\n}\n\nexport function getNodeExecutionAccentRgb(nodeType?: string): string {\n const [red, green, blue] = hexToRgb(getNodeExecutionAccent(nodeType))\n return `${red}, ${green}, ${blue}`\n}\n\nexport const LOGIC_NODE_HANDLE_COLORS: Record<string, string> = {\n start: '!bg-green-500',\n end: '!bg-red-500',\n if_else: '!bg-amber-500',\n code: '!bg-cyan-500',\n http_request: '!bg-orange-500',\n s3_write: '!bg-cyan-500',\n template_transform: '!bg-pink-500',\n iteration: '!bg-indigo-500',\n knowledge_base: '!bg-emerald-500',\n answer: '!bg-blue-500',\n question_classifier: '!bg-purple-500',\n parameter_extractor: '!bg-emerald-500',\n variable_assigner: '!bg-sky-500',\n variable_aggregator: '!bg-violet-500',\n document_extractor: '!bg-rose-500',\n list_operator: '!bg-lime-500',\n iteration_start: '!bg-indigo-500',\n note: '!bg-yellow-500',\n entity: '!bg-blue-500',\n datasource: '!bg-cyan-500',\n model_provider: '!bg-slate-500',\n group: '!bg-slate-500',\n}\n","/**\n * Edge Insert Popup\n * =================\n * Dify-style inline node type selector that appears when\n * clicking the + button on an edge midpoint. Allows quick\n * insertion of a node between two connected nodes.\n */\n\nimport { memo, useState, useRef, useEffect, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { WorkflowNodeType } from '../../contracts'\nimport { LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS } from '../../constants/workflow-constants'\n\ntype InsertableNodeItem = {\n nodeType: WorkflowNodeType\n nameKey: string\n subcategory: string\n}\n\n/**\n * Subset of node types that make sense for inline edge insertion.\n * Excludes: start, end, iteration_start, note (annotations)\n */\nconst INSERTABLE_NODES: InsertableNodeItem[] = [\n { nodeType: 'if_else', nameKey: 'ifElseNode', subcategory: 'Control' },\n { nodeType: 'iteration', nameKey: 'iterationNode', subcategory: 'Control' },\n { nodeType: 'code', nameKey: 'codeNode', subcategory: 'Data' },\n { nodeType: 'http_request', nameKey: 'httpRequestNode', subcategory: 'Data' },\n { nodeType: 'template_transform', nameKey: 'templateTransformNode', subcategory: 'Data' },\n { nodeType: 'variable_assigner', nameKey: 'variableAssignerNode', subcategory: 'Data' },\n { nodeType: 'variable_aggregator', nameKey: 'variableAggregatorNode', subcategory: 'Data' },\n { nodeType: 'list_operator', nameKey: 'listOperatorNode', subcategory: 'Data' },\n { nodeType: 'document_extractor', nameKey: 'documentExtractorNode', subcategory: 'Data' },\n { nodeType: 'knowledge_base', nameKey: 'knowledgeBaseNode', subcategory: 'AI' },\n { nodeType: 'answer', nameKey: 'answerNode', subcategory: 'AI' },\n { nodeType: 'question_classifier', nameKey: 'questionClassifierNode', subcategory: 'AI' },\n { nodeType: 'parameter_extractor', nameKey: 'parameterExtractorNode', subcategory: 'AI' },\n { nodeType: 'audio_input', nameKey: 'audioInputNode', subcategory: 'AI' },\n { nodeType: 'speech_transcriber', nameKey: 'speechTranscriberNode', subcategory: 'AI' },\n]\n\ntype EdgeInsertPopupProps = {\n position: { x: number; y: number }\n onSelect: (nodeType: WorkflowNodeType) => void\n onClose: () => void\n}\n\nfunction EdgeInsertPopupComponent({ position, onSelect, onClose }: EdgeInsertPopupProps) {\n const tWorkflow = useTranslations('agents.workflow')\n const [searchQuery, setSearchQuery] = useState('')\n const popupRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n // Auto-focus search input\n useEffect(() => {\n inputRef.current?.focus()\n }, [])\n\n // Close on outside click\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (popupRef.current && !popupRef.current.contains(event.target as HTMLElement)) {\n onClose()\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [onClose])\n\n // Close on Escape\n useEffect(() => {\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [onClose])\n\n const filteredNodes = searchQuery.trim()\n ? INSERTABLE_NODES.filter((item) =>\n tWorkflow(item.nameKey).toLowerCase().includes(searchQuery.toLowerCase())\n )\n : INSERTABLE_NODES\n\n const handleSelect = useCallback((nodeType: WorkflowNodeType) => {\n onSelect(nodeType)\n onClose()\n }, [onSelect, onClose])\n\n return (\n <div\n ref={popupRef}\n className=\"nodrag nopan pointer-events-auto absolute z-50\"\n style={{\n transform: `translate(-50%, -50%) translate(${position.x}px, ${position.y}px)`,\n }}\n >\n <div className=\"liquid-surface w-[200px] rounded-xl p-2 shadow-2xl ring-1 ring-black/5 dark:ring-white/10\">\n {/* Search */}\n <input\n ref={inputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n placeholder={tWorkflow('searchPalette')}\n className=\"mb-1.5 w-full rounded-lg bg-gray-100/60 px-2.5 py-1.5 text-[11px] text-gray-900 placeholder-gray-400 outline-none dark:bg-white/10 dark:text-white dark:placeholder-gray-500\"\n />\n\n {/* Node list */}\n <div className=\"max-h-[240px] space-y-0.5 overflow-y-auto\">\n {filteredNodes.map((item) => {\n const IconComponent = LOGIC_ICON_MAP[item.nodeType]\n const gradient = LOGIC_NODE_GRADIENTS[item.nodeType] ?? 'from-gray-400 to-gray-500'\n\n return (\n <button\n key={item.nodeType}\n type=\"button\"\n onClick={() => handleSelect(item.nodeType)}\n className=\"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left transition-colors hover:bg-gray-100/60 dark:hover:bg-white/10\"\n >\n <div className={`flex h-5 w-5 items-center justify-center rounded-md bg-gradient-to-br ${gradient} shadow-sm`}>\n {IconComponent && <IconComponent className=\"h-3 w-3 text-white\" />}\n </div>\n <span className=\"truncate text-[11px] font-medium text-gray-700 dark:text-gray-300\">\n {tWorkflow(item.nameKey)}\n </span>\n </button>\n )\n })}\n {filteredNodes.length === 0 && (\n <p className=\"py-2 text-center text-[10px] text-gray-400 dark:text-gray-500\">\n {tWorkflow('noLogicNodes')}\n </p>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport const EdgeInsertPopup = memo(EdgeInsertPopupComponent)\n","import { memo, useState, useRef, useCallback } from 'react'\nimport {\n getBezierPath,\n EdgeLabelRenderer,\n BaseEdge,\n useReactFlow,\n type EdgeProps,\n} from '@xyflow/react'\nimport { XMarkIcon, PlusIcon } from '@heroicons/react/24/solid'\nimport { Badge, type BadgeColor } from '@ui/components/badge'\nimport type { WorkflowNodeType } from '../../contracts'\nimport { EdgeInsertPopup } from './edge-insert-popup'\n\nexport type ConditionalEdgeData = {\n label?: string\n onInsertNode?: (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => void\n}\n\n// Map well-known branch labels to canonical Badge colors. Anything not in\n// this map (e.g. Question Classifier category names) falls back to purple,\n// matching the previous `DEFAULT_LABEL_STYLE` behaviour.\nconst LABEL_COLORS: Record<string, BadgeColor> = {\n True: 'green',\n False: 'red',\n Loop: 'violet',\n}\nconst DEFAULT_LABEL_COLOR: BadgeColor = 'purple'\n\nfunction ConditionalEdgeComponent({\n id,\n source,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n sourceHandleId,\n selected,\n style = {},\n markerEnd,\n data,\n}: EdgeProps) {\n const [isHovered, setIsHovered] = useState(false)\n const [showInsertPopup, setShowInsertPopup] = useState(false)\n const hoverTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleMouseEnter = useCallback(() => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n hoverTimeout.current = null\n setIsHovered(true)\n }, [])\n\n const handleMouseLeave = useCallback(() => {\n hoverTimeout.current = setTimeout(() => setIsHovered(false), 100)\n }, [])\n const { setEdges } = useReactFlow()\n\n const [edgePath, labelX, labelY] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n })\n\n const edgeData = data as ConditionalEdgeData | undefined\n const label = edgeData?.label\n ?? (sourceHandleId === 'true-out' ? 'True' : undefined)\n ?? (sourceHandleId === 'false-out' ? 'False' : undefined)\n ?? (sourceHandleId === 'loop-out' ? 'Loop' : undefined)\n\n const labelColor: BadgeColor | undefined = label ? (LABEL_COLORS[label] ?? DEFAULT_LABEL_COLOR) : undefined\n const showControls = selected || isHovered\n\n const handleDeleteEdge = (event: React.MouseEvent) => {\n event.stopPropagation()\n setEdges((currentEdges) => currentEdges.filter((edge) => edge.id !== id))\n }\n\n const handleInsertClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n setShowInsertPopup(true)\n }\n\n const handleInsertNodeSelect = (nodeType: WorkflowNodeType) => {\n // Calculate midpoint in flow coordinates\n const midpointX = (sourceX + targetX) / 2\n const midpointY = (sourceY + targetY) / 2\n\n edgeData?.onInsertNode?.(id, nodeType, { x: midpointX, y: midpointY })\n setShowInsertPopup(false)\n }\n\n // Compute vertical offsets for labels, + button, and delete button\n // so they don't overlap\n const hasLabel = Boolean(label && labelColor)\n const insertButtonOffset = hasLabel ? -20 : 0\n const deleteButtonOffset = hasLabel ? (showInsertPopup ? -40 : -40) : (showInsertPopup ? -20 : -20)\n\n return (\n <g\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* Invisible wider path for easier hover/click detection */}\n <path\n d={edgePath}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={20}\n className=\"react-flow__edge-interaction\"\n />\n <BaseEdge id={id} path={edgePath} markerEnd={markerEnd} style={style} />\n\n <EdgeLabelRenderer>\n {/* Conditional label (True / False / Loop / Category names) */}\n {hasLabel && labelColor && (\n <div\n className=\"nodrag nopan pointer-events-auto absolute\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,\n }}\n data-testid={`edge-label-${id}`}\n >\n <Badge color={labelColor} size=\"xs\">{label}</Badge>\n </div>\n )}\n\n {/* Insert node button — shown on hover */}\n {showControls && !showInsertPopup && (\n <button\n type=\"button\"\n className=\"nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-teal-300 bg-white shadow-md transition-colors hover:bg-teal-50 dark:border-teal-600 dark:bg-gray-800 dark:hover:bg-teal-900/30\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + insertButtonOffset}px)`,\n }}\n onClick={handleInsertClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label=\"Insert node\"\n >\n <PlusIcon className=\"h-3 w-3 text-teal-500 dark:text-teal-400\" />\n </button>\n )}\n\n {/* Insert popup */}\n {showInsertPopup && (\n <EdgeInsertPopup\n position={{ x: labelX, y: labelY + insertButtonOffset }}\n onSelect={handleInsertNodeSelect}\n onClose={() => setShowInsertPopup(false)}\n />\n )}\n\n {/* Delete button — shown on hover or selection */}\n {showControls && (\n <button\n type=\"button\"\n className=\"nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-white shadow-md transition-colors hover:bg-red-50 dark:border-red-600 dark:bg-gray-800 dark:hover:bg-red-900/30\"\n style={{\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + deleteButtonOffset}px)`,\n }}\n onClick={handleDeleteEdge}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label=\"Delete connection\"\n >\n <XMarkIcon className=\"h-3 w-3 text-red-500 dark:text-red-400\" />\n </button>\n )}\n </EdgeLabelRenderer>\n </g>\n )\n}\n\nexport const ConditionalEdge = memo(ConditionalEdgeComponent)\n","import type { ConnectionLineComponentProps } from '@xyflow/react'\nimport { getBezierPath } from '@xyflow/react'\n\nexport function CustomConnectionLine({\n fromX,\n fromY,\n toX,\n toY,\n fromPosition,\n toPosition,\n}: ConnectionLineComponentProps) {\n const [path] = getBezierPath({\n sourceX: fromX,\n sourceY: fromY,\n sourcePosition: fromPosition,\n targetX: toX,\n targetY: toY,\n targetPosition: toPosition,\n })\n\n return (\n <g>\n <path\n d={path}\n fill=\"none\"\n stroke=\"#14b8a6\"\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n className=\"animate-dash\"\n />\n <circle\n cx={toX}\n cy={toY}\n r={4}\n fill=\"#14b8a6\"\n stroke=\"white\"\n strokeWidth={1.5}\n />\n </g>\n )\n}\n","import { useState, useCallback, useRef, useEffect, memo } from 'react'\nimport {\n ArrowUturnLeftIcon,\n ArrowUturnRightIcon,\n ArrowsPointingInIcon,\n MagnifyingGlassPlusIcon,\n MagnifyingGlassMinusIcon,\n MapIcon,\n CommandLineIcon,\n Bars2Icon,\n CursorArrowRaysIcon,\n HandRaisedIcon,\n Squares2X2Icon,\n ArrowsRightLeftIcon,\n EllipsisHorizontalIcon,\n} from '@heroicons/react/24/outline'\nimport type { CanvasControlMode } from '../../store/workflow-store'\nimport type { WorkflowCardDisplayMode } from '../../types'\nimport type { LayoutDirection } from '../../utils/layout-engine'\n\ninterface DraggableCommandBarProps {\n zoomIn: () => void\n zoomOut: () => void\n onFitView: () => void\n onUndo: () => void\n onRedo: () => void\n canUndo: boolean\n canRedo: boolean\n controlMode: CanvasControlMode\n onControlModeChange: (mode: CanvasControlMode) => void\n showMinimap: boolean\n onToggleMinimap: () => void\n showDots: boolean\n onToggleDots: () => void\n cardDisplayMode: WorkflowCardDisplayMode\n onToggleCardDisplayMode: () => void\n layoutDirection: LayoutDirection\n onLayoutDirectionChange: (direction: LayoutDirection) => void\n showShortcuts: boolean\n onToggleShortcuts: () => void\n onCloseShortcuts: () => void\n tWorkflow: (key: string) => string\n}\n\n/** Frosted glass style applied via inline style so it works regardless of CSS class availability */\n/** CSS class name for liquid glass — defined in globals.css */\nconst GLASS_CLASS = 'liquid-surface'\n\nexport const DraggableCommandBar = memo(function DraggableCommandBar({\n zoomIn,\n zoomOut,\n onFitView,\n onUndo,\n onRedo,\n canUndo,\n canRedo,\n controlMode,\n onControlModeChange,\n showMinimap,\n onToggleMinimap,\n showDots,\n onToggleDots,\n cardDisplayMode,\n onToggleCardDisplayMode,\n layoutDirection,\n onLayoutDirectionChange,\n showShortcuts,\n onToggleShortcuts,\n onCloseShortcuts,\n tWorkflow,\n}: DraggableCommandBarProps) {\n const [position, setPosition] = useState({ x: 16, y: -16 })\n const isDragging = useRef(false)\n const dragOffset = useRef({ x: 0, y: 0 })\n const barRef = useRef<HTMLDivElement>(null)\n\n const handlePointerDown = useCallback((event: React.PointerEvent) => {\n if ((event.target as HTMLElement).closest('button')) return\n isDragging.current = true\n dragOffset.current = {\n x: event.clientX - position.x,\n y: event.clientY - position.y,\n }\n barRef.current?.setPointerCapture(event.pointerId)\n event.preventDefault()\n }, [position.x, position.y])\n\n const handlePointerMove = useCallback((event: React.PointerEvent) => {\n if (!isDragging.current) return\n const newX = event.clientX - dragOffset.current.x\n const newY = event.clientY - dragOffset.current.y\n setPosition({ x: newX, y: newY })\n }, [])\n\n const handlePointerUp = useCallback((event: React.PointerEvent) => {\n isDragging.current = false\n barRef.current?.releasePointerCapture(event.pointerId)\n }, [])\n\n // Close shortcuts panel on Escape key\n useEffect(() => {\n if (!showShortcuts) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onCloseShortcuts()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [showShortcuts, onCloseShortcuts])\n\n const buttonClassName = 'rounded-lg p-1.5 text-gray-600 transition-colors hover:bg-white/40 active:bg-white/60 dark:text-gray-400 dark:hover:bg-white/10 dark:active:bg-white/15'\n const activeButtonClassName = 'rounded-lg p-1.5 transition-colors hover:bg-white/40 dark:hover:bg-white/10 text-indigo-600 dark:text-indigo-400'\n const inactiveButtonClassName = 'rounded-lg p-1.5 transition-colors hover:bg-white/40 dark:hover:bg-white/10 text-gray-400 dark:text-gray-500'\n const dividerClassName = 'mx-0.5 h-4 w-px bg-gray-400/30 dark:bg-white/10'\n\n return (\n <div\n ref={barRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n className={`absolute ${showShortcuts ? 'z-[100]' : 'z-[5]'} select-none`}\n style={{\n left: position.x,\n bottom: position.y > 0 ? undefined : Math.abs(position.y),\n top: position.y > 0 ? position.y : undefined,\n cursor: isDragging.current ? 'grabbing' : 'grab',\n }}\n >\n <div\n className={`${GLASS_CLASS} flex items-center gap-0.5 rounded-2xl px-2 py-1.5`}\n >\n {/* Drag handle */}\n <div className=\"mr-0.5 flex cursor-grab items-center px-0.5 active:cursor-grabbing\">\n <Bars2Icon className=\"h-3.5 w-3.5 text-gray-400/70 dark:text-gray-500/70\" />\n </div>\n\n {/* Pointer / Hand mode toggle */}\n <button\n type=\"button\"\n onClick={() => onControlModeChange('pointer')}\n title={tWorkflow('pointerMode')}\n className={controlMode === 'pointer' ? activeButtonClassName : inactiveButtonClassName}\n >\n <CursorArrowRaysIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => onControlModeChange('hand')}\n title={tWorkflow('handMode')}\n className={controlMode === 'hand' ? activeButtonClassName : inactiveButtonClassName}\n >\n <HandRaisedIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Zoom controls */}\n <button type=\"button\" onClick={() => zoomIn()} title=\"Zoom In\" className={buttonClassName}>\n <MagnifyingGlassPlusIcon className=\"h-4 w-4\" />\n </button>\n <button type=\"button\" onClick={() => zoomOut()} title=\"Zoom Out\" className={buttonClassName}>\n <MagnifyingGlassMinusIcon className=\"h-4 w-4\" />\n </button>\n <button type=\"button\" onClick={onFitView} title={tWorkflow('fitView')} className={buttonClassName}>\n <ArrowsPointingInIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Undo / Redo */}\n <button\n type=\"button\"\n onClick={onUndo}\n disabled={!canUndo}\n title={tWorkflow('undo')}\n className={`${buttonClassName} disabled:opacity-30 disabled:hover:bg-transparent`}\n >\n <ArrowUturnLeftIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={onRedo}\n disabled={!canRedo}\n title={tWorkflow('redo')}\n className={`${buttonClassName} disabled:opacity-30 disabled:hover:bg-transparent`}\n >\n <ArrowUturnRightIcon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Minimap toggle */}\n <button\n type=\"button\"\n onClick={onToggleMinimap}\n title={tWorkflow('toggleMinimap')}\n className={showMinimap ? activeButtonClassName : inactiveButtonClassName}\n >\n <MapIcon className=\"h-4 w-4\" />\n </button>\n {/* Dots (grid background) toggle */}\n <button\n type=\"button\"\n onClick={onToggleDots}\n title={tWorkflow('toggleDots')}\n className={showDots ? activeButtonClassName : inactiveButtonClassName}\n >\n <EllipsisHorizontalIcon className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={onToggleCardDisplayMode}\n title={tWorkflow('toggleCardDisplayMode')}\n className={cardDisplayMode === 'compact' ? activeButtonClassName : inactiveButtonClassName}\n >\n <Squares2X2Icon className=\"h-4 w-4\" />\n </button>\n\n <div className={dividerClassName} />\n\n {/* Layout mode — cycles Free → LR → TB → Free */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => {\n const cycle: LayoutDirection[] = ['free', 'LR', 'TB']\n const currentIndex = cycle.indexOf(layoutDirection)\n const nextDirection = cycle[(currentIndex + 1) % cycle.length]\n onLayoutDirectionChange(nextDirection)\n }}\n title={tWorkflow('layoutMode')}\n className={layoutDirection !== 'free' ? activeButtonClassName : buttonClassName}\n >\n <ArrowsRightLeftIcon className=\"h-4 w-4\" />\n </button>\n {layoutDirection !== 'free' && (\n <span className=\"pointer-events-none absolute -right-1 -top-1 flex h-3.5 min-w-[14px] items-center justify-center rounded-full bg-indigo-500 px-0.5 text-[7px] font-bold text-white\">\n {layoutDirection}\n </span>\n )}\n </div>\n\n <div className={dividerClassName} />\n\n {/* Keyboard shortcuts */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={onToggleShortcuts}\n title={tWorkflow('shortcuts')}\n className={showShortcuts ? activeButtonClassName : inactiveButtonClassName}\n >\n <CommandLineIcon className=\"h-4 w-4\" />\n </button>\n {showShortcuts && (\n <>\n <div\n className=\"fixed inset-0 z-40 cursor-default\"\n onClick={onCloseShortcuts}\n onPointerDown={(event) => event.stopPropagation()}\n aria-hidden=\"true\"\n />\n <div\n className={`${GLASS_CLASS} absolute bottom-full left-0 z-50 mb-2 w-64 cursor-default rounded-xl p-3 shadow-2xl`}\n onClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <p className=\"mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400\">\n {tWorkflow('shortcuts')}\n </p>\n <div className=\"space-y-1.5\">\n {[\n { keys: 'V', label: tWorkflow('pointerMode') },\n { keys: 'H', label: tWorkflow('handMode') },\n { keys: '⌘ Z', label: tWorkflow('undo') },\n { keys: '⌘ ⇧ Z', label: tWorkflow('redo') },\n { keys: '⌘ C', label: tWorkflow('shortcutCopy') },\n { keys: '⌘ V', label: tWorkflow('shortcutPaste') },\n { keys: '⌘ D', label: tWorkflow('shortcutDuplicate') },\n { keys: '⌘ A', label: tWorkflow('shortcutSelectAll') },\n { keys: '⌘ ⇧ F', label: tWorkflow('fitView') },\n { keys: '⌘ 1', label: tWorkflow('shortcutFitView') },\n { keys: '⌘ +', label: tWorkflow('shortcutZoomIn') },\n { keys: '⌘ -', label: tWorkflow('shortcutZoomOut') },\n { keys: '⇧ 1', label: tWorkflow('shortcutZoom100') },\n { keys: '⇧ 5', label: tWorkflow('shortcutZoom50') },\n { keys: 'Esc', label: tWorkflow('shortcutDeselect') },\n { keys: '⌫', label: tWorkflow('shortcutDelete') },\n { keys: 'L', label: tWorkflow('layoutMode') },\n { keys: 'G', label: tWorkflow('toggleDots') },\n { keys: 'M', label: tWorkflow('toggleMinimap') },\n ].map((shortcut) => (\n <div key={shortcut.keys} className=\"flex items-center justify-between\">\n <span className=\"text-[11px] text-gray-600 dark:text-gray-300\">\n {shortcut.label}\n </span>\n <span className=\"flex items-center gap-0.5\">\n {shortcut.keys.split(' ').map((key) => (\n <kbd\n key={key}\n className=\"inline-flex min-w-[20px] items-center justify-center rounded-md bg-white/60 px-1.5 py-0.5 text-[10px] font-medium text-gray-500 shadow-sm ring-1 ring-inset ring-gray-300/40 dark:bg-white/10 dark:text-gray-400 dark:ring-white/10\"\n >\n {key}\n </kbd>\n ))}\n </span>\n </div>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n )\n})\n","/**\n * Entity Visual Helpers\n * =====================\n * Generic appearance helpers for entity nodes independent of hardcoded entity types.\n */\n\nimport {\n CircleStackIcon,\n BuildingStorefrontIcon,\n UsersIcon,\n ShoppingBagIcon,\n ClipboardDocumentCheckIcon,\n ShieldCheckIcon,\n CurrencyDollarIcon,\n ChartBarSquareIcon,\n PresentationChartBarIcon,\n ChartPieIcon,\n} from '@heroicons/react/24/outline'\n\nconst ENTITY_STYLE_PRESETS = [\n {\n gradient: 'from-blue-400 to-blue-600',\n badgeColor: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n handleColor: '!bg-blue-500',\n minimapColor: '#3b82f6',\n },\n {\n gradient: 'from-purple-400 to-purple-600',\n badgeColor: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n handleColor: '!bg-purple-500',\n minimapColor: '#a855f7',\n },\n {\n gradient: 'from-amber-700 to-orange-900',\n badgeColor: 'bg-amber-100 text-amber-800 dark:bg-amber-500/20 dark:text-amber-300',\n handleColor: '!bg-amber-700',\n minimapColor: '#92400e',\n },\n {\n gradient: 'from-emerald-500 to-teal-600',\n badgeColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n handleColor: '!bg-emerald-500',\n minimapColor: '#059669',\n },\n {\n gradient: 'from-rose-500 to-red-600',\n badgeColor: 'bg-rose-100 text-rose-700 dark:bg-rose-500/20 dark:text-rose-300',\n handleColor: '!bg-rose-500',\n minimapColor: '#f43f5e',\n },\n {\n gradient: 'from-cyan-500 to-blue-600',\n badgeColor: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n handleColor: '!bg-cyan-500',\n minimapColor: '#06b6d4',\n },\n] as const\n\nfunction hashString(value: string): number {\n let hash = 0\n for (let index = 0; index < value.length; index += 1) {\n hash = (hash << 5) - hash + value.charCodeAt(index)\n hash |= 0\n }\n return Math.abs(hash)\n}\n\nfunction normalizeEntityKey(entityKey: string | undefined): string {\n return (entityKey ?? 'entity').trim().toLowerCase() || 'entity'\n}\n\nfunction presetFromKey(entityKey: string | undefined) {\n const normalized = normalizeEntityKey(entityKey)\n const presetIndex = hashString(normalized) % ENTITY_STYLE_PRESETS.length\n return ENTITY_STYLE_PRESETS[presetIndex]\n}\n\nconst ENTITY_ICON_MAP: Record<string, React.ComponentType<{ className?: string }>> = {\n stations: BuildingStorefrontIcon,\n users: UsersIcon,\n competitors: ShoppingBagIcon,\n approvals: ClipboardDocumentCheckIcon,\n rules: ShieldCheckIcon,\n current_prices: CurrencyDollarIcon,\n competitor_prices: ChartBarSquareIcon,\n product_metrics: ChartPieIcon,\n station_metrics: PresentationChartBarIcon,\n entities: CircleStackIcon,\n}\n\nexport function getEntityIcon(entityKey: string | undefined): React.ComponentType<{ className?: string }> {\n const normalized = normalizeEntityKey(entityKey)\n return ENTITY_ICON_MAP[normalized] ?? CircleStackIcon\n}\n\nexport function getEntityGradient(entityKey: string | undefined): string {\n return presetFromKey(entityKey).gradient\n}\n\nexport function getEntityBadgeColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).badgeColor\n}\n\nexport function getEntityHandleColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).handleColor\n}\n\nexport function getEntityMinimapColor(entityKey: string | undefined): string {\n return presetFromKey(entityKey).minimapColor\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n XMarkIcon,\n PlusIcon,\n MagnifyingGlassIcon,\n ServerStackIcon,\n TableCellsIcon,\n FunnelIcon,\n CircleStackIcon,\n CheckIcon,\n VariableIcon,\n Cog6ToothIcon,\n} from '@heroicons/react/24/outline'\nimport { GlassModal, type GlassModalSection } from '@ui/components/glass-modal'\nimport { Button } from '@ui/components/button'\nimport type { DatasourceNodeConfig, DatasourceFilter, DatasourceFilterOp } from '../../contracts'\n\ntype DatasourceDefinition = {\n id: string\n name: string\n dialect: string\n}\n\ntype ColumnDefinition = {\n name: string\n type: string\n nullable?: boolean\n}\n\nconst DATASOURCE_LOGOS: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n mysql: '/logos/datasources/mysql.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDatasourceLogo(datasourceId: string, dialect?: string): string | null {\n const search = (dialect ?? datasourceId).toLowerCase()\n for (const [key, url] of Object.entries(DATASOURCE_LOGOS)) {\n if (search.includes(key)) return url\n }\n return null\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n string: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n varchar: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n text: 'bg-gray-500/10 text-gray-500 dark:text-gray-400',\n integer: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n int: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n bigint: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n number: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n decimal: 'bg-indigo-500/10 text-indigo-600 dark:text-indigo-400',\n float: 'bg-indigo-500/10 text-indigo-600 dark:text-indigo-400',\n boolean: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n date: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n timestamp: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n datetime: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n json: 'bg-violet-500/10 text-violet-600 dark:text-violet-400',\n jsonb: 'bg-violet-500/10 text-violet-600 dark:text-violet-400',\n uuid: 'bg-teal-500/10 text-teal-600 dark:text-teal-400',\n array: 'bg-pink-500/10 text-pink-600 dark:text-pink-400',\n}\n\nexport type DatasourceNodeConfigFormProps = {\n open: boolean\n nodeId: string\n config: DatasourceNodeConfig\n onSave: (config: DatasourceNodeConfig) => void\n onCancel: () => void\n datasources: DatasourceDefinition[]\n onLoadTables: (datasourceId: string) => Promise<string[]>\n onLoadSchema: (datasourceId: string, table: string) => Promise<ColumnDefinition[]>\n readOnly?: boolean\n}\n\nconst SIDEBAR_SECTIONS: GlassModalSection[] = [\n { id: 'connection', label: 'Connection', icon: CircleStackIcon },\n { id: 'table', label: 'Table', icon: TableCellsIcon },\n { id: 'columns', label: 'Columns', icon: TableCellsIcon },\n { id: 'filters', label: 'Filters', icon: FunnelIcon },\n { id: 'output', label: 'Output', icon: Cog6ToothIcon },\n]\n\nexport function DatasourceNodeConfigForm({\n open,\n nodeId,\n config,\n onSave,\n onCancel,\n datasources,\n onLoadTables,\n onLoadSchema,\n readOnly = false,\n}: DatasourceNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.datasourceNodeConfig')\n\n const [activeSectionId, setActiveSectionId] = useState('connection')\n const [selectedDatasourceId, setSelectedDatasourceId] = useState(config.datasourceId ?? '')\n const [selectedTable, setSelectedTable] = useState(config.table ?? '')\n const [availableTables, setAvailableTables] = useState<string[]>([])\n const [availableColumns, setAvailableColumns] = useState<ColumnDefinition[]>([])\n const [selectedColumns, setSelectedColumns] = useState<string[]>([...(config.selectedColumns ?? [])])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [limit, setLimit] = useState(config.limit)\n // Filters now use the richer `{column, op, value}` array shape. We\n // seed state from `config.filters` when present; otherwise we fall\n // back to the legacy `filterVariables` map (variable → column) and\n // convert it to implicit-`eq` rows so older graphs edit cleanly.\n const [filters, setFilters] = useState<DatasourceFilter[]>(() => {\n if (config.filters && config.filters.length > 0) return [...config.filters]\n const legacy: DatasourceFilter[] = Object.entries(config.filterVariables ?? {})\n .filter(([variableName, column]) => variableName && column)\n .map(([variableName, column]) => ({\n column: column as string,\n op: 'eq',\n value: `{{ inputs.${variableName} }}`,\n }))\n return legacy\n })\n const [tableSearch, setTableSearch] = useState('')\n const [columnSearch, setColumnSearch] = useState('')\n\n const allColumnNames = availableColumns.map((column) => column.name)\n const allSelected = selectedColumns.length > 0 && selectedColumns.length === allColumnNames.length\n const selectedDatasource = datasources.find((datasource) => datasource.id === selectedDatasourceId)\n\n const filteredTables = useMemo(\n () => tableSearch ? availableTables.filter((table) => table.toLowerCase().includes(tableSearch.toLowerCase())) : availableTables,\n [availableTables, tableSearch]\n )\n const filteredColumns = useMemo(\n () => columnSearch ? availableColumns.filter((column) => column.name.toLowerCase().includes(columnSearch.toLowerCase())) : availableColumns,\n [availableColumns, columnSearch]\n )\n\n const loadTables = useCallback(async (datasourceId: string) => {\n if (!datasourceId) { setAvailableTables([]); return }\n const tables = await onLoadTables(datasourceId)\n setAvailableTables(tables)\n }, [onLoadTables])\n\n const loadSchema = useCallback(async (datasourceId: string, table: string) => {\n if (!datasourceId || !table) { setAvailableColumns([]); return }\n const columns = await onLoadSchema(datasourceId, table)\n setAvailableColumns(columns)\n }, [onLoadSchema])\n\n useEffect(() => { if (selectedDatasourceId) loadTables(selectedDatasourceId) }, [selectedDatasourceId, loadTables])\n useEffect(() => { if (selectedDatasourceId && selectedTable) loadSchema(selectedDatasourceId, selectedTable) }, [selectedDatasourceId, selectedTable, loadSchema])\n\n const handleDatasourceChange = (datasourceId: string) => {\n setSelectedDatasourceId(datasourceId)\n setSelectedTable('')\n setAvailableTables([])\n setAvailableColumns([])\n setSelectedColumns([])\n setFilters([])\n setTableSearch('')\n setColumnSearch('')\n }\n\n const handleTableChange = (table: string) => {\n setSelectedTable(table)\n setAvailableColumns([])\n setSelectedColumns([])\n setFilters([])\n setColumnSearch('')\n }\n\n const handleToggleColumn = (columnName: string) => {\n setSelectedColumns((previous) =>\n previous.includes(columnName) ? previous.filter((name) => name !== columnName) : [...previous, columnName]\n )\n }\n\n const handleAddFilter = () => {\n setFilters((previous) => [...previous, { column: '', op: 'eq', value: '' }])\n }\n\n const handleUpdateFilterColumn = (index: number, nextColumn: string) => {\n setFilters((previous) => previous.map((row, i) => (i === index ? { ...row, column: nextColumn } : row)))\n }\n\n const handleUpdateFilterOp = (index: number, nextOp: DatasourceFilterOp) => {\n setFilters((previous) => previous.map((row, i) => {\n if (i !== index) return row\n // Swapping to `in` requires an array value — coerce an existing\n // scalar into a single-element array so the author doesn't lose\n // their typing. Swapping back to a scalar op keeps the first\n // element.\n if (nextOp === 'in') {\n const arr = Array.isArray(row.value) ? row.value : (row.value == null || row.value === '' ? [] : [row.value])\n return { ...row, op: nextOp, value: arr }\n }\n if (Array.isArray(row.value)) {\n return { ...row, op: nextOp, value: row.value[0] ?? '' }\n }\n return { ...row, op: nextOp }\n }))\n }\n\n const handleUpdateFilterValue = (index: number, nextValue: string) => {\n setFilters((previous) => previous.map((row, i) => {\n if (i !== index) return row\n if (row.op === 'in') {\n // Comma-separated list → array. Trimmed, empties dropped.\n const arr = nextValue.split(',').map((s) => s.trim()).filter((s) => s.length > 0)\n return { ...row, value: arr }\n }\n return { ...row, value: nextValue }\n }))\n }\n\n const handleRemoveFilter = (index: number) => {\n setFilters((previous) => previous.filter((_, i) => i !== index))\n }\n\n const handleSave = () => {\n const cleaned = filters\n .filter((row) => row.column.trim())\n .map<DatasourceFilter>((row) => {\n const op = (row.op ?? 'eq') as DatasourceFilterOp\n if (op === 'in') {\n const arr = Array.isArray(row.value) ? row.value : []\n return { column: row.column.trim(), op, value: arr }\n }\n return { column: row.column.trim(), op, value: row.value ?? '' }\n })\n onSave({\n ...config,\n datasourceId: selectedDatasourceId,\n dialect: selectedDatasource?.dialect ?? '',\n table: selectedTable,\n selectedColumns,\n outputVariable: outputVariable.trim(),\n limit,\n filters: cleaned,\n // Clear the legacy field so the engine's back-compat path doesn't\n // double-apply filters after a round-trip through this form.\n filterVariables: undefined,\n })\n }\n\n const filterEntries = filters\n const canSave = selectedDatasourceId && selectedTable && selectedColumns.length > 0\n\n // ── Section content ─────────────────────────────────────────────────\n\n function renderSection() {\n switch (activeSectionId) {\n case 'connection':\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('datasourceHelp')}</p>\n <div className=\"grid grid-cols-2 gap-2\">\n {datasources.map((datasource) => {\n const isSelected = datasource.id === selectedDatasourceId\n const logo = getDatasourceLogo(datasource.id, datasource.dialect)\n return (\n <button\n key={datasource.id}\n type=\"button\"\n onClick={() => { if (!readOnly) { handleDatasourceChange(datasource.id); setActiveSectionId('table') } }}\n disabled={readOnly && datasource.id !== selectedDatasourceId}\n className={`flex items-center gap-3 rounded-xl border px-3 py-2.5 text-left transition-all ${\n isSelected\n ? 'border-cyan-500/50 bg-cyan-500/5 ring-1 ring-cyan-500/20 dark:border-cyan-400/40 dark:bg-cyan-400/5'\n : 'border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm dark:border-white/10 dark:bg-white/[0.03] dark:hover:border-white/20'\n }`}\n >\n <div className=\"flex h-9 w-9 shrink-0 items-center justify-center\">\n {logo ? (\n <img src={logo} alt={datasource.dialect} className=\"h-7 w-7\" />\n ) : (\n <ServerStackIcon className=\"h-6 w-6 text-gray-400\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-xs font-semibold text-gray-900 dark:text-white\">{datasource.name}</p>\n <p className=\"text-[10px] text-gray-400 dark:text-gray-500\">{datasource.dialect}</p>\n </div>\n {isSelected && <CheckIcon className=\"h-4 w-4 shrink-0 text-cyan-500 dark:text-cyan-400\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n\n case 'table':\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('tableHelp')}</p>\n {!selectedDatasourceId ? (\n <p className=\"py-8 text-center text-xs text-gray-400\">{t('selectDatasource')}</p>\n ) : (\n <div className=\"liquid-surface rounded-xl border border-white/30 dark:border-white/10\">\n <div className=\"flex items-center gap-2 border-b border-gray-200/50 px-3 py-2 dark:border-white/5\">\n <MagnifyingGlassIcon className=\"h-3.5 w-3.5 text-gray-400\" />\n <input\n type=\"text\"\n value={tableSearch}\n onChange={(event) => setTableSearch(event.target.value)}\n placeholder={t('selectTable')}\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n {availableTables.length > 0 && (\n <span className=\"text-[10px] text-gray-400\">{availableTables.length}</span>\n )}\n </div>\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {filteredTables.length === 0 && (\n <p className=\"px-3 py-6 text-center text-[10px] text-gray-400\">{t('noColumnsAvailable')}</p>\n )}\n {filteredTables.map((table) => {\n const isSelected = table === selectedTable\n return (\n <button\n key={table}\n type=\"button\"\n onClick={() => { if (!readOnly) { handleTableChange(table); setActiveSectionId('columns') } }}\n className={`flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-cyan-500/10 font-semibold text-cyan-700 dark:text-cyan-300'\n : 'text-gray-700 hover:bg-gray-100/60 dark:text-gray-300 dark:hover:bg-white/5'\n }`}\n >\n <TableCellsIcon className=\"h-3.5 w-3.5 shrink-0 text-gray-400\" />\n <span className=\"truncate\">{table}</span>\n {isSelected && <CheckIcon className=\"ml-auto h-3.5 w-3.5 shrink-0 text-cyan-500\" />}\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n\n case 'columns':\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n {selectedColumns.length}/{availableColumns.length} selected\n </p>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={() => setSelectedColumns(allSelected ? [] : [...allColumnNames])}\n disabled={availableColumns.length === 0}\n className=\"text-[10px] font-semibold text-cyan-600 hover:text-cyan-700 disabled:opacity-40 dark:text-cyan-400\"\n >\n {allSelected ? t('deselectAll') : t('selectAll')}\n </button>\n )}\n </div>\n\n {!selectedTable ? (\n <p className=\"py-8 text-center text-xs text-gray-400\">{t('selectTable')}</p>\n ) : (\n <div className=\"liquid-surface rounded-xl border border-white/30 dark:border-white/10\">\n <div className=\"flex items-center gap-2 border-b border-gray-200/50 px-3 py-2 dark:border-white/5\">\n <MagnifyingGlassIcon className=\"h-3.5 w-3.5 text-gray-400\" />\n <input\n type=\"text\"\n value={columnSearch}\n onChange={(event) => setColumnSearch(event.target.value)}\n placeholder=\"Search columns...\"\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto p-1\">\n {filteredColumns.length === 0 && (\n <p className=\"px-3 py-6 text-center text-[10px] text-gray-400\">{t('noColumnsAvailable')}</p>\n )}\n {filteredColumns.map((column) => {\n const isSelected = selectedColumns.includes(column.name)\n const typeColor = TYPE_COLORS[column.type.toLowerCase()] ?? TYPE_COLORS.string\n return (\n <button\n key={column.name}\n type=\"button\"\n onClick={() => { if (!readOnly) handleToggleColumn(column.name) }}\n className={`flex w-full items-center gap-2 rounded-lg px-3 py-1.5 text-left transition-colors ${\n isSelected ? 'bg-cyan-500/8 dark:bg-cyan-400/5' : 'hover:bg-gray-100/60 dark:hover:bg-white/5'\n }`}\n >\n <div className={`flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors ${\n isSelected ? 'border-cyan-500 bg-cyan-500 dark:border-cyan-400 dark:bg-cyan-400' : 'border-gray-300 dark:border-gray-600'\n }`}>\n {isSelected && <CheckIcon className=\"h-2.5 w-2.5 text-white\" />}\n </div>\n <span className=\"flex-1 truncate text-xs text-gray-900 dark:text-white\">\n {column.name}\n {column.nullable && <span className=\"ml-1 text-[9px] text-gray-400\">?</span>}\n </span>\n <span className={`shrink-0 rounded-full px-1.5 py-0.5 text-[9px] font-medium ${typeColor}`}>\n {column.type}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n\n case 'filters':\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('filtersHelp')}</p>\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 text-[10px] font-semibold text-cyan-600 hover:text-cyan-700 dark:text-cyan-400\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n )}\n </div>\n\n {filterEntries.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8\">\n <FunnelIcon className=\"h-8 w-8 text-gray-300 dark:text-gray-600\" />\n <p className=\"text-xs text-gray-400\">No filters configured</p>\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 rounded-lg bg-cyan-500/10 px-3 py-1.5 text-[10px] font-semibold text-cyan-600 hover:bg-cyan-500/15 dark:text-cyan-400\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {filterEntries.map((row, index) => {\n const currentOp = (row.op ?? 'eq') as DatasourceFilterOp\n const valueDisplay = Array.isArray(row.value)\n ? row.value.map(String).join(', ')\n : (row.value == null ? '' : String(row.value))\n return (\n <div key={index} className=\"flex items-center gap-2 rounded-xl border border-gray-200 bg-white px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]\">\n {/* Column */}\n <select\n value={row.column}\n onChange={(event) => handleUpdateFilterColumn(index, event.target.value)}\n disabled={readOnly}\n className=\"w-[28%] rounded bg-transparent text-xs text-gray-900 outline-none disabled:opacity-60 dark:text-white\"\n >\n <option value=\"\">{t('columnName')}</option>\n {availableColumns.map((column) => (\n <option key={column.name} value={column.name}>{column.name}</option>\n ))}\n </select>\n {/* Operator — the headline of #87 */}\n <select\n value={currentOp}\n onChange={(event) => handleUpdateFilterOp(index, event.target.value as DatasourceFilterOp)}\n disabled={readOnly}\n className=\"w-[18%] rounded bg-gray-50 px-1 text-center text-[10px] font-semibold uppercase text-gray-700 outline-none disabled:opacity-60 dark:bg-white/[0.05] dark:text-gray-200\"\n title={t('filterOperator', { _: 'Filter operator' } as never)}\n >\n <option value=\"eq\">= (eq)</option>\n <option value=\"neq\">≠ (neq)</option>\n <option value=\"lt\">&lt; (lt)</option>\n <option value=\"lte\">≤ (lte)</option>\n <option value=\"gt\">&gt; (gt)</option>\n <option value=\"gte\">≥ (gte)</option>\n <option value=\"like\">LIKE</option>\n <option value=\"in\">IN (…)</option>\n </select>\n {/* Value — scalar input, or comma-separated for `in` */}\n <input\n type=\"text\"\n value={valueDisplay}\n onChange={(event) => handleUpdateFilterValue(index, event.target.value)}\n placeholder={currentOp === 'in' ? 'comma-separated, e.g. SP, RJ, MG' : t('variableReference')}\n readOnly={readOnly}\n className=\"flex-1 bg-transparent text-xs text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n {!readOnly && (\n <button\n type=\"button\"\n onClick={() => handleRemoveFilter(index)}\n className=\"shrink-0 rounded-md p-1 text-gray-400 transition-colors hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-900/20\"\n >\n <XMarkIcon className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n\n case 'output':\n return (\n <div className=\"space-y-5\">\n <div>\n <label className=\"mb-1.5 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('outputVariableLabel')}</label>\n <p className=\"mb-2 text-[10px] text-gray-500 dark:text-gray-400\">{t('outputVariableHelp')}</p>\n <div className=\"flex items-center gap-2 rounded-xl border border-gray-200 bg-white px-3 py-2.5 dark:border-white/10 dark:bg-white/[0.03]\">\n <VariableIcon className=\"h-4 w-4 text-gray-400\" />\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder=\"datasourceResult\"\n readOnly={readOnly}\n className=\"flex-1 bg-transparent text-sm text-gray-900 outline-none placeholder:text-gray-400 dark:text-white dark:placeholder:text-gray-500\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('limitLabel')}</label>\n <p className=\"mb-2 text-[10px] text-gray-500 dark:text-gray-400\">{t('limitHelp')}</p>\n <input\n type=\"number\"\n value={limit}\n onChange={(event) => setLimit(Math.max(1, Number.parseInt(event.target.value, 10) || 1))}\n min={1}\n max={10000}\n readOnly={readOnly}\n className=\"w-32 rounded-xl border border-gray-200 bg-white px-3 py-2.5 text-sm text-gray-900 outline-none focus:border-cyan-400 dark:border-white/10 dark:bg-white/[0.03] dark:text-white\"\n />\n </div>\n\n {/* Summary */}\n {selectedDatasource && selectedTable && (\n <div className=\"rounded-xl border border-cyan-500/20 bg-cyan-500/5 p-3 dark:border-cyan-400/15 dark:bg-cyan-400/5\">\n <p className=\"text-[10px] font-semibold uppercase tracking-wider text-cyan-600 dark:text-cyan-400 mb-2\">Summary</p>\n <div className=\"space-y-1 text-xs text-gray-600 dark:text-gray-300\">\n <p><span className=\"text-gray-400\">Source:</span> {selectedDatasource.name} ({selectedDatasource.dialect})</p>\n <p><span className=\"text-gray-400\">Table:</span> {selectedTable}</p>\n <p><span className=\"text-gray-400\">Columns:</span> {selectedColumns.length} of {availableColumns.length}</p>\n <p><span className=\"text-gray-400\">Filters:</span> {filterEntries.length}</p>\n <p><span className=\"text-gray-400\">Limit:</span> {limit}</p>\n <p><span className=\"text-gray-400\">Output:</span> {outputVariable || '—'}</p>\n </div>\n </div>\n )}\n </div>\n )\n\n default:\n return null\n }\n }\n\n const logo = getDatasourceLogo(selectedDatasourceId, selectedDatasource?.dialect)\n\n return (\n <GlassModal\n open={open}\n onClose={onCancel}\n title={selectedDatasource?.name ?? t('datasourceLabel')}\n subtitle={selectedTable ? `${selectedDatasource?.dialect} · ${selectedTable}` : undefined}\n icon={logo ? <img src={logo} alt=\"\" className=\"h-5 w-5\" /> : <ServerStackIcon className=\"h-5 w-5 text-white\" />}\n gradient=\"from-cyan-500 to-blue-600\"\n maxWidth=\"3xl\"\n sidebar={{\n sections: SIDEBAR_SECTIONS,\n activeSectionId,\n onSectionChange: setActiveSectionId,\n }}\n footer={readOnly ? undefined : (\n <div className=\"flex justify-end gap-2 px-6 py-3\">\n <Button outline onClick={onCancel}>{t('cancel')}</Button>\n <Button color=\"cyan\" onClick={handleSave} disabled={!canSave}>{t('save')}</Button>\n </div>\n )}\n >\n {renderSection()}\n </GlassModal>\n )\n}\n","/**\n * Agent framework icons — LangChain, CrewAI, Google ADK, Anthropic Claude Agent SDK.\n * SVG paths sourced from simple-icons where available.\n */\n\nexport type AgentFramework = 'langchain' | 'crewai' | 'google-adk' | 'anthropic' | 'strands' | 'openai' | 'custom'\n\ntype FrameworkIconProps = { className?: string }\n\nexport function LangChainIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"LangChain\">\n <path d=\"M6.0988 5.9175C2.7359 5.9175 0 8.6462 0 12s2.736 6.0825 6.0988 6.0825h11.8024C21.2641 18.0825 24 15.3538 24 12s-2.736-6.0825-6.0988-6.0825ZM5.9774 7.851c.493.0124 1.02.2496 1.273.6228.3673.4592.4778 1.0668.8944 1.4932.5604.6118 1.199 1.1505 1.7161 1.802.4892.5954.8386 1.2937 1.1436 1.9975.1244.2335.1257.5202.31.7197.0908.1204.5346.4483.4383.5645.0555.1204.4702.286.3263.4027-.1944.04-.4129.0476-.5616-.1074-.0549.126-.183.0596-.2819.0432a4 4 0 0 0-.025.0736c-.3288.0219-.5754-.3126-.732-.565-.3111-.168-.6642-.2702-.982-.446-.0182.2895.0452.6485-.231.8353-.014.5565.8436.0656.9222.4804-.061.0067-.1286-.0095-.1774.0373-.2239.2172-.4805-.1645-.7385-.007-.3464.174-.3808.3161-.8096.352-.0237-.0359-.0143-.0592.0059-.0811.1207-.1399.1295-.3046.3356-.3643-.2122-.0334-.3899.0833-.5686.1757-.2323.095-.2304-.2141-.5878.0164-.0396-.0322-.0208-.0615.0018-.0864.0908-.1107.2102-.127.345-.1208-.663-.3686-.9751.4507-1.2813.0432-.092.0243-.1265.1068-.1845.1652-.05-.0548-.0123-.1212-.0099-.1857-.0598-.028-.1356-.041-.1179-.1366-.1171-.0395-.1988.0295-.286.0952-.0787-.0608.0532-.1492.0776-.2125.0702-.1216.23-.025.3111-.1126.2306-.1308.552.0814.8155.0455.203.0255.4544-.1825.3526-.39-.2171-.2767-.179-.6386-.1839-.9695-.0268-.1929-.491-.4382-.6252-.6462-.1659-.1873-.295-.4047-.4243-.6182-.4666-.9008-.3198-2.0584-.9077-2.8947-.266.1466-.6125.0774-.8418-.119-.1238.1125-.1292.2598-.139.4161-.297-.2962-.2593-.8559-.022-1.1855.0969-.1302.2127-.2373.342-.3316.0292-.0213.0391-.0419.0385-.0747.1174-.5267.5764-.7391 1.0694-.7267m12.4071.46c.5575 0 1.0806.2159 1.474.6082s.61.9145.61 1.4704c0 .556-.2167 1.078-.61 1.4698v.0006l-.902.8995a2.08 2.08 0 0 1-.8597.5166l-.0164.0047-.0058.0164a2.05 2.05 0 0 1-.474.7308l-.9018.8995c-.3934.3924-.917.6083-1.4745.6083s-1.0806-.216-1.474-.6083c-.813-.8107-.813-2.1294 0-2.9402l.9019-.8995a2.056 2.056 0 0 1 .858-.5143l.017-.0053.0058-.0158a2.07 2.07 0 0 1 .4752-.7337l.9018-.8995c.3934-.3924.9171-.6083 1.4745-.6083zm0 .8965a1.18 1.18 0 0 0-.8388.3462l-.9018.8995a1.181 1.181 0 0 0-.3427.9252l.0053.0572c.0323.2652.149.5044.3374.6917.13.1296.2733.2114.4471.2686a.9.9 0 0 1 .014.1582.884.884 0 0 1-.2609.6304l-.0554.0554c-.3013-.1028-.5525-.253-.7794-.4792a2.06 2.06 0 0 1-.5761-1.0968l-.0099-.0578-.0461.0368a1.1 1.1 0 0 0-.0876.0794l-.9024.8995c-.4623.461-.4623 1.212 0 1.673.2311.2305.535.346.8394.3461.3043 0 .6077-.1156.8388-.3462l.9019-.8995c.4623-.461.4623-1.2113 0-1.673a1.17 1.17 0 0 0-.4367-.2749 1 1 0 0 1-.014-.1611c0-.2591.1023-.505.2901-.6923.3019.1028.57.2694.7962.495.3007.2999.4994.679.5756 1.0968l.0105.0578.0455-.0373a1.1 1.1 0 0 0 .0887-.0794l.902-.8996c.4622-.461.4628-1.2124 0-1.6735a1.18 1.18 0 0 0-.8395-.3462Zm-9.973 5.1567-.0006.0006c-.0793.3078-.1048.8318-.506.847-.033.1776.1228.2445.2655.1874.141-.0645.2081.0508.2557.1657.2177.0317.5394-.0725.5516-.3298-.325-.1867-.4253-.5418-.5662-.8709\" />\n </svg>\n )\n}\n\nexport function CrewAIIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"CrewAI\">\n <path d=\"M12.482.18C7.161 1.319 1.478 9.069 1.426 15.372c-.051 5.527 3.1 8.68 8.68 8.627 6.716-.05 14.259-6.87 12.09-10.9-.672-1.292-1.396-1.344-2.687-.207-1.602 1.395-1.654.31-.207-2.893 1.757-3.98 1.705-5.322-.31-7.544C17.03.388 14.962-.388 12.482.181Zm5.322 2.068c2.273 2.015 2.376 4.236.465 8.42-1.395 3.1-2.17 3.515-3.824 1.86-1.24-1.24-1.343-3.46-.258-6.044 1.137-2.635.982-3.1-.568-1.653-3.72 3.358-6.458 9.765-5.424 12.503.464 1.189.825 1.395 2.737 1.395 2.79 0 6.303-1.705 7.957-3.926 1.756-2.274 2.79-2.274 2.79-.052 0 3.875-6.459 8.627-11.625 8.627-6.251 0-9.351-4.752-7.491-11.47.878-2.995 4.443-7.904 7.077-9.66 3.255-2.17 5.684-2.17 8.164 0z\" />\n </svg>\n )\n}\n\nexport function AnthropicIcon({ className }: FrameworkIconProps) {\n return (\n <svg role=\"img\" viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"Anthropic\">\n <path d=\"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z\" />\n </svg>\n )\n}\n\nexport function GoogleADKIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" className={className} aria-label=\"Google ADK\">\n {/* Robot face — rounded capsule with two eyes */}\n <path d=\"M7 5.5C4.5 5.5 2.5 7.5 2.5 10v1c0 2.5 2 4.5 4.5 4.5h10c2.5 0 4.5-2 4.5-4.5v-1c0-2.5-2-4.5-4.5-4.5H7Z\" stroke=\"#4285F4\" strokeWidth=\"2\" fill=\"none\" />\n <path d=\"M14.5 5.5C14.5 5.5 16 4 17 5.5\" stroke=\"#34A853\" strokeWidth=\"2\" strokeLinecap=\"round\" fill=\"none\" />\n <circle cx=\"9\" cy=\"10.5\" r=\"1.2\" fill=\"#4285F4\" />\n <circle cx=\"15\" cy=\"10.5\" r=\"1.2\" fill=\"#4285F4\" />\n {/* Code brackets below */}\n <path d=\"M4 18.5V20.5H5.5\" stroke=\"#FBBC04\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9 17L7 19.5L9 22\" stroke=\"#EA4335\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15 17L17 19.5L15 22\" stroke=\"#EA4335\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function StrandsIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 300 462\" fill=\"currentColor\" className={className} aria-label=\"Strands\">\n <path d=\"M97.29 52.79C85.07 49.17 72.22 56.14 68.6 68.36C64.98 80.58 71.95 93.43 84.17 97.05L235.12 139.78C245.22 142.77 246.36 156.63 236.87 161.23L32.55 260.29C-14.94 283.32-9.16 352.74 41.48 367.59L189.55 411.01L190.13 411.17C202.18 414.38 214.67 407.4 218.2 395.36C221.78 383.12 214.77 370.3 202.54 366.71L54.47 323.29C44.34 320.32 43.19 306.44 52.69 301.83L257.01 202.77C304.43 179.78 298.76 110.48 248.23 95.51L97.29 52.79Z\" opacity=\"0.6\" />\n <path d=\"M259.15 0.98C271.39-2.57 284.2 4.47 287.75 16.71C291.31 28.95 284.27 41.76 272.03 45.31L71.17 103.67C40.71 112.52 37.2 154.26 65.75 168.08L241.34 253.09C307.87 285.3 299.79 382.55 228.86 403.34L30.4 461.5C18.17 465.09 5.35 458.08 1.76 445.84C-1.82 433.61 5.19 420.79 17.42 417.2L215.88 359.04C246.28 350.13 249.74 308.45 221.23 294.65L45.63 209.64C-20.98 177.39-12.78 79.99 58.29 59.34L259.15 0.98Z\" />\n </svg>\n )\n}\n\nexport function OpenAIIcon({ className }: FrameworkIconProps) {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" className={className} aria-label=\"OpenAI\">\n <path d=\"M14.949 6.547a3.94 3.94 0 0 0-.348-3.273 4.11 4.11 0 0 0-4.4-1.934A4.1 4.1 0 0 0 8.423.2 4.15 4.15 0 0 0 6.305.086a4.1 4.1 0 0 0-1.891.948 4.04 4.04 0 0 0-1.158 1.753 4.1 4.1 0 0 0-1.563.679A4 4 0 0 0 .554 4.72a3.99 3.99 0 0 0 .502 4.731 3.94 3.94 0 0 0 .346 3.274 4.11 4.11 0 0 0 4.402 1.933c.382.425.852.764 1.377.995.526.231 1.095.35 1.67.346 1.78.002 3.358-1.132 3.901-2.804a4.1 4.1 0 0 0 1.563-.68 4 4 0 0 0 1.14-1.253 3.99 3.99 0 0 0-.506-4.716m-6.097 8.406a3.05 3.05 0 0 1-1.945-.694l.096-.054 3.23-1.838a.53.53 0 0 0 .265-.455v-4.49l1.366.778q.02.011.025.035v3.722c-.003 1.653-1.361 2.992-3.037 2.996m-6.53-2.75a2.95 2.95 0 0 1-.36-2.01l.095.057L5.29 12.09a.53.53 0 0 0 .527 0l3.949-2.246v1.555a.05.05 0 0 1-.022.041L6.473 13.3c-1.454.826-3.311.335-4.15-1.098m-.85-6.94A3.02 3.02 0 0 1 3.07 3.949v3.785a.51.51 0 0 0 .262.451l3.93 2.237-1.366.779a.05.05 0 0 1-.048 0L2.585 9.342a2.98 2.98 0 0 1-1.113-4.094zm11.216 2.571L8.747 5.576l1.362-.776a.05.05 0 0 1 .048 0l3.265 1.86a3 3 0 0 1 1.173 1.207 2.96 2.96 0 0 1-.27 3.2 3.05 3.05 0 0 1-1.36.997V8.279a.52.52 0 0 0-.276-.445m1.36-2.015-.097-.057-3.226-1.855a.53.53 0 0 0-.53 0L6.249 6.153V4.598a.04.04 0 0 1 .019-.04L9.533 2.7a3.07 3.07 0 0 1 3.257.139c.474.325.843.778 1.066 1.303.223.526.289 1.103.191 1.664zM5.503 8.575 4.139 7.8a.05.05 0 0 1-.026-.037V4.049c0-.57.166-1.127.476-1.607s.752-.864 1.275-1.105a3.08 3.08 0 0 1 3.234.41l-.096.054-3.23 1.838a.53.53 0 0 0-.265.455zm.742-1.577 1.758-1 1.762 1v2l-1.755 1-1.762-1z\" />\n </svg>\n )\n}\n\n/** Color + label metadata for each framework */\nexport const FRAMEWORK_META: Record<AgentFramework, {\n label: string\n color: string\n badgeColor: string\n IconComponent: (props: FrameworkIconProps) => React.ReactNode\n}> = {\n langchain: {\n label: 'LangChain',\n color: '#1C3C3C',\n badgeColor: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n IconComponent: LangChainIcon,\n },\n crewai: {\n label: 'CrewAI',\n color: '#FF5A50',\n badgeColor: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n IconComponent: CrewAIIcon,\n },\n 'google-adk': {\n label: 'Google ADK',\n color: '#4285F4',\n badgeColor: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n IconComponent: GoogleADKIcon,\n },\n anthropic: {\n label: 'Claude Agent SDK',\n color: '#D4A574',\n badgeColor: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n IconComponent: AnthropicIcon,\n },\n strands: {\n label: 'Strands',\n color: '#FF9900',\n badgeColor: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n IconComponent: StrandsIcon,\n },\n openai: {\n label: 'OpenAI SDK',\n color: '#10A37F',\n badgeColor: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n IconComponent: OpenAIIcon,\n },\n custom: {\n label: 'Custom',\n color: '#6366F1',\n badgeColor: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300',\n IconComponent: ({ className }: FrameworkIconProps) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className={className} aria-label=\"Custom\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n ),\n },\n}\n\n/** Get the framework icon + metadata for a given framework key */\nexport function getFrameworkMeta(framework: string | undefined) {\n if (!framework) return FRAMEWORK_META.custom\n return FRAMEWORK_META[framework as AgentFramework] ?? FRAMEWORK_META.custom\n}\n\n/**\n * Model provider compatibility per framework.\n * - anthropic (Claude Agent SDK): Claude models only\n * - google-adk: Gemini primary, Claude via connectors — no Meta/Amazon\n * - langchain: All providers (50+)\n * - crewai: All providers (native + LiteLLM fallback)\n * - custom: All providers\n */\nconst FRAMEWORK_ALLOWED_PROVIDERS: Record<AgentFramework, string[] | 'all'> = {\n anthropic: ['anthropic'],\n 'google-adk': ['anthropic', 'google'],\n openai: ['openai'],\n strands: 'all',\n langchain: 'all',\n crewai: 'all',\n custom: 'all',\n}\n\n/** Check if a model ID is compatible with a framework */\nexport function isModelCompatibleWithFramework(modelId: string, framework: AgentFramework): boolean {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return true\n const provider = modelId.split('.')[0]\n return allowed.includes(provider)\n}\n\n/**\n * Check if a framework is compatible with a set of model provider types.\n * Provider types are: 'anthropic', 'openai', 'google', 'amazon', 'meta', etc.\n * Maps provider types to model ID prefixes for compatibility checking.\n */\nconst PROVIDER_TYPE_TO_MODEL_PROVIDERS: Record<string, string[]> = {\n aws_bedrock: ['anthropic', 'amazon', 'meta', 'mistral'],\n openai_api: ['openai'],\n google_vertex: ['google'],\n azure_openai: ['openai'],\n anthropic_api: ['anthropic'],\n groq: ['meta', 'mistral'],\n mistral: ['mistral'],\n huggingface: ['meta', 'mistral'],\n ollama: ['meta', 'mistral'],\n // Also handle raw provider names (from ModelProvider.provider field)\n anthropic: ['anthropic'],\n amazon: ['anthropic', 'amazon', 'meta'],\n google: ['google'],\n openai: ['openai'],\n meta: ['meta'],\n}\n\nexport function isFrameworkCompatibleWithProviders(framework: AgentFramework, providerTypes: string[]): boolean {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return true\n\n // Collect all model provider prefixes available from connected providers\n const availableModelProviders = new Set<string>()\n for (const providerType of providerTypes) {\n const mapped = PROVIDER_TYPE_TO_MODEL_PROVIDERS[providerType]\n if (mapped) {\n for (const mp of mapped) availableModelProviders.add(mp)\n }\n }\n\n // Framework is compatible if any of its allowed providers overlap with available\n return allowed.some((allowedProvider) => availableModelProviders.has(allowedProvider))\n}\n\n/** Filter models to only those compatible with a framework */\nexport function getCompatibleModels<T extends { id: string }>(models: T[], framework: AgentFramework): T[] {\n const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework]\n if (!allowed || allowed === 'all') return models\n return models.filter((model) => {\n const provider = model.id.split('.')[0]\n return allowed.includes(provider)\n })\n}\n\n/** Get the first compatible framework for a given model, or 'custom' as fallback */\nexport function getDefaultFrameworkForModel(modelId: string): AgentFramework {\n const provider = modelId.split('.')[0]\n if (provider === 'anthropic') return 'anthropic'\n if (provider === 'google') return 'google-adk'\n return 'langchain'\n}\n","import type { ReactNode } from 'react'\nimport { getNodeStateClass } from '../../constants'\n\ninterface NodeCardProps {\n /** React Flow selection state */\n selected?: boolean\n /** Node type key for border colors (e.g. 'agent', 'tool', 'if_else') */\n nodeType: string\n /** Width class — defaults to 'w-[260px]' */\n width?: string\n /** Custom border class override (e.g. group node with dynamic colors) */\n customBorder?: string\n /** Display variant — 'error' shows dashed amber border for missing entities */\n variant?: 'default' | 'error'\n /** Compact density mode for short-card view */\n compact?: boolean\n /** Additional CSS classes */\n className?: string\n /** Inline styles */\n style?: React.CSSProperties\n /** Interactive attributes for div-based clickable nodes */\n role?: string\n tabIndex?: number\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void\n onDoubleClick?: (event: React.MouseEvent<HTMLDivElement>) => void\n children: ReactNode\n}\n\n/**\n * Base card container for all standard flow nodes.\n *\n * Provides shared styling: rounded corners, border, glassmorphism surface,\n * padding, selection/hover state ring, and group context for child hover effects.\n *\n * Nodes that do NOT use this: NoteFlowNode (custom bg/border), GroupFlowNode expanded (resizable container).\n */\nexport function NodeCard({\n selected,\n nodeType,\n width = 'w-[260px]',\n customBorder,\n variant = 'default',\n compact = false,\n className,\n style,\n role,\n tabIndex,\n onClick,\n onKeyDown,\n onDoubleClick,\n children,\n}: NodeCardProps) {\n if (variant === 'error') {\n return (\n <div\n className={`${width} rounded-xl border border-dashed border-amber-400/60 bg-amber-50/50 ${compact ? 'min-h-[84px] p-3' : 'p-4'} dark:border-amber-500/40 dark:bg-amber-900/10${className ? ` ${className}` : ''}`}\n style={style}\n >\n {children}\n </div>\n )\n }\n\n return (\n <div\n data-workflow-node-type={nodeType}\n className={`group relative ${width} rounded-xl border liquid-surface ${compact ? 'min-h-[84px] p-3' : 'p-4'} transition-all ${getNodeStateClass(selected, nodeType, customBorder)}${className ? ` ${className}` : ''}`}\n style={style}\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n onDoubleClick={onDoubleClick}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport { GraphNodeBadge, GraphNodeHeader, GraphNodeIconBubble, GraphNodeMeta } from './graph-node-primitives'\nimport { LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_BADGE_SOFT_COLORS, LOGIC_NODE_GRADIENTS } from '../../constants/workflow-constants'\nimport { NodeCard } from './node-card'\n\ntype WorkflowTone = keyof typeof LOGIC_NODE_GRADIENTS\n\ninterface NodeInteractiveCardProps {\n nodeId: string\n onEdit?: (id: string) => void\n selected?: boolean\n nodeType: string\n width?: string\n compact?: boolean\n className?: string\n children: ReactNode\n}\n\nexport function NodeInteractiveCard({\n nodeId,\n onEdit,\n selected,\n nodeType,\n width,\n compact = false,\n className = 'cursor-pointer text-left',\n children,\n}: NodeInteractiveCardProps) {\n return (\n <NodeCard\n compact={compact}\n selected={selected}\n nodeType={nodeType}\n width={width}\n role=\"button\"\n tabIndex={0}\n onClick={() => onEdit?.(nodeId)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') onEdit?.(nodeId)\n }}\n className={className}\n >\n {children}\n </NodeCard>\n )\n}\n\ninterface NodeIconBubbleProps {\n tone: WorkflowTone\n children: ReactNode\n}\n\nexport function NodeIconBubble({ tone, children }: NodeIconBubbleProps) {\n return (\n <GraphNodeIconBubble className={`bg-gradient-to-br ${LOGIC_NODE_GRADIENTS[tone]}`}>\n {children}\n </GraphNodeIconBubble>\n )\n}\n\ninterface NodeCardHeaderProps {\n icon: ReactNode\n title: string\n description?: string\n compact?: boolean\n iconClassName: string\n}\n\nexport function NodeCardHeader({ icon, title, description, compact = false, iconClassName }: NodeCardHeaderProps) {\n return <GraphNodeHeader icon={icon} title={title} description={description} compact={compact} iconClassName={iconClassName} />\n}\n\ninterface NodeCardMetaProps {\n compact?: boolean\n children: ReactNode\n}\n\nexport function NodeCardMeta({ compact = false, children }: NodeCardMetaProps) {\n return <GraphNodeMeta compact={compact}>{children}</GraphNodeMeta>\n}\n\ninterface NodeCardBadgeProps {\n children: ReactNode\n className?: string\n tone?: WorkflowTone\n soft?: boolean\n}\n\nexport function NodeCardBadge({ children, className, tone, soft = false }: NodeCardBadgeProps) {\n // Tone-driven callers still rely on the legacy LOGIC_NODE_BADGE_*_COLORS\n // className contract (rendered through GraphNodeBadge). Plain-className\n // callers also flow through GraphNodeBadge unchanged. Only the bare\n // fallback (no tone, no className) lands on the canonical <Badge>.\n if (tone) {\n const toneClass = soft ? LOGIC_NODE_BADGE_SOFT_COLORS[tone] : LOGIC_NODE_BADGE_COLORS[tone]\n return <GraphNodeBadge className={`inline-flex items-center rounded-full px-2 py-0.5 text-[10px] ${soft ? 'font-medium' : 'font-semibold'} ${toneClass}`}>{children}</GraphNodeBadge>\n }\n\n if (className) {\n return <GraphNodeBadge className={className}>{children}</GraphNodeBadge>\n }\n\n return <Badge color=\"zinc\" size=\"xs\">{children}</Badge>\n}\n\ninterface NodeCardDeleteActionProps {\n nodeId: string\n onDelete: ((id: string) => void) | undefined\n}\n\nexport function NodeCardDeleteAction({ nodeId, onDelete }: NodeCardDeleteActionProps) {\n if (!onDelete) return null\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n onDelete(nodeId)\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation()\n onDelete(nodeId)\n }\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label=\"Delete\"\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )\n}\n\ninterface NodeCardBranchLabelProps {\n children: ReactNode\n className: string\n}\n\nexport function NodeCardBranchLabel({ children, className }: NodeCardBranchLabelProps) {\n return <span className={className}>{children}</span>\n}\n","import { Handle, Position } from '@xyflow/react'\nimport type { CSSProperties } from 'react'\nimport { useWorkflowStore } from '../../store/workflow-store'\n\nconst BASE_HANDLE_CLASS = '!h-3 !w-3 !border-2 !border-white dark:!border-gray-800'\n\n/**\n * Resolve handle position based on the current layout direction.\n * In LR mode: Left = input, Right = output (default)\n * In TB mode: Top = input, Bottom = output\n * In free mode: use the original position as-is\n */\nfunction useResolvedPosition(position: Position): Position {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n if (layoutDirection !== 'TB') return position\n\n // Map LR positions to TB positions\n if (position === Position.Left) return Position.Top\n if (position === Position.Right) return Position.Bottom\n return position\n}\n\ninterface WorkflowHandleProps {\n type: 'source' | 'target'\n position: Position\n id: string\n colorClass: string\n className?: string\n style?: CSSProperties\n}\n\nexport function WorkflowHandle({ type, position, id, colorClass, className, style }: WorkflowHandleProps) {\n const resolvedPosition = useResolvedPosition(position)\n return (\n <Handle\n type={type}\n position={resolvedPosition}\n id={id}\n style={style}\n className={`${BASE_HANDLE_CLASS} ${colorClass}${className ? ` ${className}` : ''}`}\n />\n )\n}\n\ninterface WorkflowDynamicTargetHandlesProps {\n count: number\n idPrefix: string\n colorClass: string\n}\n\nexport function WorkflowDynamicTargetHandles({ count, idPrefix, colorClass }: WorkflowDynamicTargetHandlesProps) {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const isTB = layoutDirection === 'TB'\n const handlePosition = isTB ? Position.Top : Position.Left\n\n return (\n <>\n {Array.from({ length: count }, (_, index) => (\n <WorkflowHandle\n key={`${idPrefix}-${index}`}\n type=\"target\"\n position={handlePosition}\n id={`${idPrefix}-${index}`}\n colorClass={colorClass}\n style={isTB\n ? { left: `${((index + 1) / (count + 1)) * 100}%` }\n : { top: `${((index + 1) / (count + 1)) * 100}%` }\n }\n />\n ))}\n </>\n )\n}\n\ninterface WorkflowDynamicHandlesProps {\n count: number\n idPrefix: string\n colorClass: string\n type: 'source' | 'target'\n position: Position\n keyIds?: string[]\n}\n\nexport function WorkflowDynamicHandles({\n count,\n idPrefix,\n colorClass,\n type,\n position,\n keyIds,\n}: WorkflowDynamicHandlesProps) {\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const isTB = layoutDirection === 'TB'\n const resolvedPosition = isTB\n ? (position === Position.Left ? Position.Top : position === Position.Right ? Position.Bottom : position)\n : position\n\n return (\n <>\n {Array.from({ length: count }, (_, index) => (\n <WorkflowHandle\n key={keyIds?.[index] ?? `${idPrefix}-${index}`}\n type={type}\n position={resolvedPosition}\n id={`${idPrefix}-${index}`}\n colorClass={colorClass}\n style={isTB\n ? { left: `${((index + 1) / (count + 1)) * 100}%` }\n : { top: `${((index + 1) / (count + 1)) * 100}%` }\n }\n />\n ))}\n </>\n )\n}\n","/**\n * Node Running Indicator\n * ======================\n * Dify-style running status overlay for workflow nodes.\n * Shows a spinner (running), checkmark (success), or X (error)\n * badge in the top-right corner of the node. Reads status from\n * the Zustand workflow store's nodeResults map.\n */\n\nimport { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport { getNodeExecutionAccent, getNodeExecutionAccentRgb } from '../../constants'\nimport { useWorkflowStore } from '../../store/workflow-store'\n\ntype NodeRunningIndicatorProps = {\n nodeId: string\n}\n\nfunction NodeRunningIndicatorComponent({ nodeId }: NodeRunningIndicatorProps) {\n const nodeResult = useWorkflowStore((state) => state.nodeResults[nodeId])\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [nodeType, setNodeType] = useState<string>('agent')\n const accentColor = useMemo(() => getNodeExecutionAccent(nodeType), [nodeType])\n const accentRgb = useMemo(() => getNodeExecutionAccentRgb(nodeType), [nodeType])\n\n useEffect(() => {\n const indicatorElement = containerRef.current\n\n if (!indicatorElement) return\n\n const nodeWrapper = indicatorElement.closest('.react-flow__node')\n\n if (!nodeWrapper) return\n\n const wrapperClass = Array.from(nodeWrapper.classList).find(\n (className) => className.startsWith('react-flow__node-') && className !== 'react-flow__node',\n )\n\n if (!wrapperClass) return\n\n setNodeType(wrapperClass.replace('react-flow__node-', ''))\n }, [])\n\n if (!nodeResult) return null\n\n const { status, durationMs } = nodeResult\n\n return (\n <div ref={containerRef} className=\"absolute -right-1 -top-1 z-10 flex items-center gap-1\">\n {status === 'pending' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-gray-300 bg-white shadow-sm dark:border-gray-600 dark:bg-gray-800\">\n <span className=\"h-2 w-2 rounded-full bg-gray-400 dark:bg-gray-500\" />\n </span>\n )}\n\n {status === 'running' && (\n <span\n className=\"flex h-5 w-5 items-center justify-center rounded-full border bg-white shadow-sm dark:bg-gray-800\"\n style={{\n borderColor: `rgba(${accentRgb}, 0.55)`,\n boxShadow: `0 0 0 1px rgba(${accentRgb}, 0.16), 0 6px 16px rgba(${accentRgb}, 0.18)`,\n }}\n >\n <svg className=\"h-3 w-3 animate-spin motion-reduce:animate-none\" style={{ color: accentColor }} viewBox=\"0 0 24 24\" fill=\"none\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n </span>\n )}\n\n {status === 'success' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-emerald-300 bg-emerald-50 shadow-sm dark:border-emerald-600 dark:bg-emerald-900/30\">\n <svg className=\"h-3 w-3 text-emerald-600 dark:text-emerald-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clipRule=\"evenodd\" />\n </svg>\n </span>\n )}\n\n {status === 'error' && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-red-50 shadow-sm dark:border-red-600 dark:bg-red-900/30\">\n <svg className=\"h-3 w-3 text-red-600 dark:text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n </span>\n )}\n\n {/* Duration badge for completed nodes */}\n {(status === 'success' || status === 'error') && durationMs !== undefined && (\n <span\n className={`rounded-full px-1.5 py-0.5 text-[9px] font-medium shadow-sm ${\n status === 'success'\n ? 'bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300'\n : 'bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400'\n }`}\n >\n {durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(1)}s`}\n </span>\n )}\n </div>\n )\n}\n\nexport const NodeRunningIndicator = memo(NodeRunningIndicatorComponent)\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { CpuChipIcon, TrashIcon, ExclamationTriangleIcon, CommandLineIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { AgentNodeData } from '../../types'\nimport { getFrameworkMeta } from '../icons/agent-framework-icons'\nimport { getAgentTier } from '../../utils/agent-tier'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AgentFlowNode = memo(function AgentFlowNode({ id, data, selected }: { id: string; data: AgentNodeData; selected?: boolean }) {\n const t = useTranslations('agents')\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing agent (entity not loaded yet or deleted)\n if (!data.agent?.name) {\n const agentLabel = (data as { label?: string }).label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <WorkflowHandle type=\"target\" position={Position.Top} id=\"top-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <NodeCard variant=\"error\" nodeType=\"agent\" width=\"w-[320px]\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-6 w-6 text-white\" />}\n title={agentLabel || 'Agent'}\n description={t('agentNotFound')}\n iconClassName=\"flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"bottom-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n }\n\n const agentId = data.agent.id || data.agent.agentId\n const frameworkMeta = getFrameworkMeta((data.agent as Record<string, unknown>).framework as string | undefined)\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handles — always visible for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n <WorkflowHandle type=\"target\" position={Position.Top} id=\"top-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n\n <button type=\"button\" onClick={() => data.onSelect(agentId)} className=\"w-full text-left\">\n <NodeCard compact={isCompact} selected={selected} nodeType=\"agent\" width=\"w-[320px]\">\n <div className=\"flex items-start gap-3\">\n <div className=\"relative flex-shrink-0\">\n {data.agent.avatar ? (\n <img src={data.agent.avatar as string} alt={data.agent.name} className=\"h-11 w-11 rounded-full bg-white shadow-sm ring-1 ring-gray-200/50 dark:bg-gray-800 dark:ring-white/10\" />\n ) : (\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-gradient-to-br from-indigo-500/25 to-purple-500/25 ring-1 ring-indigo-500/30\">\n <CpuChipIcon className=\"h-6 w-6 text-indigo-500 dark:text-indigo-300\" />\n </div>\n )}\n <div className=\"absolute -bottom-0.5 -right-0.5 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500 ring-2 ring-white dark:ring-gray-900\">\n <CpuChipIcon className=\"h-2.5 w-2.5 text-white\" />\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"truncate text-sm font-semibold text-gray-900 dark:text-white\">{data.agent.name}</h3>\n {!isCompact && <p className=\"truncate text-xs text-gray-500 dark:text-gray-400\">{data.agent.role}</p>}\n </div>\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge color=\"indigo\" size=\"xs\">Agent</Badge>\n {(() => {\n const tier = getAgentTier(Number((data.agent as Record<string, unknown>).elo ?? 0))\n return (\n <Badge color=\"zinc\" size=\"xs\" className={tier.pillColor}>\n {tier.key}\n </Badge>\n )\n })()}\n <Badge color=\"zinc\" size=\"xs\" className={frameworkMeta.badgeColor} icon={<frameworkMeta.IconComponent className=\"h-3 w-3\" />}>\n {frameworkMeta.label}\n </Badge>\n <Badge color=\"blue\" size=\"xs\">{data.agent.modelId}</Badge>\n <Badge color=\"zinc\" size=\"xs\">T: {data.agent.temperature}</Badge>\n <Badge color=\"zinc\" size=\"xs\">v{data.agent.activePromptVersion}</Badge>\n\n {/* Agent tools — compact inline chips */}\n {data.agentTools && data.agentTools.length > 0 && (\n <>\n <div className=\"w-full\" />\n <div className=\"flex w-full items-center gap-1 border-t border-gray-200/20 pt-1 dark:border-white/5\">\n <CommandLineIcon className=\"h-3 w-3 shrink-0 text-amber-500 dark:text-amber-400\" />\n {data.agentTools.slice(0, 3).map((tool) => (\n <Badge\n key={tool.id}\n color={tool.enabled ? 'amber' : 'zinc'}\n size=\"xs\"\n className={tool.enabled ? '' : 'line-through'}\n >\n {tool.name}\n </Badge>\n ))}\n {data.agentTools.length > 3 && (\n <span className=\"text-[9px] text-gray-400 dark:text-gray-500\">+{data.agentTools.length - 3}</span>\n )}\n </div>\n </>\n )}\n\n {data.onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n data.onRemoveFromCanvas!(id)\n }}\n className=\"nodrag nopan ml-auto cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n {/* Output handles — always visible for interactive canvas */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"bottom-out\" colorClass=\"!bg-teal-500\" />\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"rule-out\" style={{ top: '75%' }} colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { CommandLineIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport type { AgentTool } from '../../contracts'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\ntype AgentToolNodeData = {\n agentTool: AgentTool\n order?: number\n displayMode?: 'detailed' | 'compact'\n onEdit?: (agentTool: AgentTool) => void\n onToggle?: (agentTool: AgentTool) => void\n onRemoveFromCanvas?: (nodeId: string) => void\n label?: string\n}\n\nconst CATEGORY_ICONS: Record<string, string> = {\n search: 'from-sky-400 to-blue-500',\n code: 'from-cyan-400 to-sky-500',\n file: 'from-violet-400 to-purple-500',\n web: 'from-orange-400 to-amber-500',\n math: 'from-emerald-400 to-green-500',\n custom: 'from-amber-400 to-orange-500',\n}\n\nconst CATEGORY_PILL: Record<string, string> = {\n search: 'bg-sky-100 text-sky-700 dark:bg-sky-500/20 dark:text-sky-300',\n code: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300',\n file: 'bg-violet-100 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300',\n web: 'bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300',\n math: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/20 dark:text-emerald-300',\n custom: 'bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300',\n}\n\nexport const AgentToolFlowNode = memo(function AgentToolFlowNode({ id, data, selected }: { id: string; data: AgentToolNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { agentTool, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n if (!agentTool?.name) {\n const label = data.label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-400\" />\n <NodeCard variant=\"error\" nodeType=\"agent_tool\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || 'Agent Tool'}\n description={t('agentToolNotFound')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-amber-500\" />\n </>\n )\n }\n\n const category = agentTool.category ?? 'custom'\n const gradient = CATEGORY_ICONS[category] ?? CATEGORY_ICONS.custom\n const pill = CATEGORY_PILL[category] ?? CATEGORY_PILL.custom\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-400\" />\n\n <NodeCard compact={isCompact} selected={selected} nodeType=\"agent_tool\" width=\"w-[280px]\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <CommandLineIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{agentTool.name}</h3>\n {!isCompact && agentTool.description && (\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">{agentTool.description}</p>\n )}\n </div>\n </div>\n\n {data.onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n }}\n >\n <ToggleSwitch\n checked={Boolean(agentTool.enabled)}\n onChange={() => data.onToggle?.(agentTool)}\n size=\"sm\"\n color=\"blue\"\n label={`${agentTool.name} enabled`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge color=\"amber\" size=\"xs\">{t('agentToolNode')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={pill}>{category}</Badge>\n {agentTool.parameters && agentTool.parameters.length > 0 && (\n <Badge color=\"zinc\" size=\"xs\">{agentTool.parameters.length} params</Badge>\n )}\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan ml-auto cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n </NodeCardMeta>\n </NodeCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-amber-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { WrenchScrewdriverIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport { ICON_MAP, CATEGORY_COLORS, CATEGORY_PILL_COLORS } from '../../constants'\nimport type { ToolCanvasData } from '../../types'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ToolFlowNode = memo(function ToolFlowNode({ id, data, selected }: { id: string; data: ToolCanvasData; selected?: boolean }) {\n const t = useTranslations('admin.tools')\n const { tool, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing tool (entity not loaded yet or deleted)\n if (!tool?.name) {\n const toolLabel = (data as { label?: string }).label\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-teal-400\" />\n <NodeCard variant=\"error\" nodeType=\"tool\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={toolLabel || t('nodeType')}\n description={t('toolNotFound')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n {onRemoveFromCanvas && (\n <div className=\"mt-2 flex justify-end\">\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"cursor-pointer rounded-lg p-1 transition hover:bg-red-50 dark:hover:bg-red-900/20\"\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n </div>\n )}\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n }\n\n const { onEdit, onToggle } = data\n const IconComponent = ICON_MAP[tool.icon ?? ''] ?? WrenchScrewdriverIcon\n const categoryKey = (tool.category ?? 'external') as keyof typeof CATEGORY_COLORS\n const gradient = tool.color ?? CATEGORY_COLORS[categoryKey] ?? CATEGORY_COLORS.external\n const categoryPill = CATEGORY_PILL_COLORS[categoryKey] ?? CATEGORY_PILL_COLORS.external\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handle for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-gray-400 dark:!bg-gray-500\" />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(tool)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"tool\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <IconComponent className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{tool.name}</h3>\n {!isCompact && <p className=\"mt-0.5 line-clamp-1 text-xs text-gray-500 dark:text-gray-400\">{String(tool.description ?? '')}</p>}\n </div>\n </div>\n\n {onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked={Boolean(tool.enabled)}\n onChange={() => onToggle(tool)}\n size=\"sm\"\n color=\"blue\"\n label={`${tool.name} enabled`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <Badge color=\"teal\" size=\"xs\">{t('nodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={categoryPill}>{tool.category}</Badge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">{String(tool.timeoutMs ?? '')}ms</span>\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n {/* Output handle — always visible for interactive canvas */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { AdjustmentsHorizontalIcon, ScaleIcon, TrashIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport { Badge } from '@ui/components/badge'\nimport { ADJUSTMENT_GRADIENT, ADJUSTMENT_PILL } from '../../constants'\nimport type { RuleNodeData } from '../../types'\nimport type { RuleNodeConfig, AgentRule } from '../../contracts'\nimport { NodeCard } from './node-card'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const RuleFlowNode = memo(function RuleFlowNode({ id, data, selected }: { id: string; data: RuleNodeData; selected?: boolean }) {\n const t = useTranslations('admin.rules')\n const { rule, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing rule — check for rule engine config mode\n if (!rule?.action) {\n const ruleConfig = (data as { config?: RuleNodeConfig }).config\n const ruleLabel = (data as { label?: string }).label\n\n // Rule engine node — config-based mode (evaluates all applicable rules)\n if (ruleConfig?.type === 'rule') {\n const contextVariableCount = ruleConfig.contextVariables ? Object.keys(ruleConfig.contextVariables).length : 0\n const editHandler = (data as { onEdit?: (nodeId: string) => void }).onEdit\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n\n <button\n type=\"button\"\n onClick={() => editHandler?.(id)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"rule\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-violet-400 to-purple-500 shadow-lg\">\n <ScaleIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">\n {ruleLabel || t('ruleEngine')}\n </h3>\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">{t('ruleEngineDescription')}</p>\n </div>\n </div>\n\n {!isCompact && (\n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Badge color=\"violet\" size=\"xs\">{t('ruleEngine')}</Badge>\n {contextVariableCount > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {contextVariableCount} vars\n </span>\n )}\n {ruleConfig.outputVariable && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n → {ruleConfig.outputVariable}\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n )}\n </NodeCard>\n </button>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n }\n\n // Truly missing rule — amber placeholder\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n <NodeCard variant=\"error\" nodeType=\"rule\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\">\n <ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">\n {ruleLabel || t('nodeType')}\n </h3>\n <p className=\"mt-0.5 text-xs text-amber-600 dark:text-amber-400\">{t('ruleNotFound')}</p>\n </div>\n </div>\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n }\n\n // Specific rule mode — rule entity found\n const onEdit = (data as { onEdit?: (rule: AgentRule) => void }).onEdit\n const onToggle = (data as { onToggle?: (rule: AgentRule) => void }).onToggle\n\n const action = rule.action as Record<string, unknown> | undefined\n const adjustmentType = String(action?.adjustmentType ?? 'percentage')\n const adjustmentValue = Number(action?.adjustmentValue ?? 0)\n const gradient = ADJUSTMENT_GRADIENT[adjustmentType] ?? ADJUSTMENT_GRADIENT.percentage\n const typePill = ADJUSTMENT_PILL[adjustmentType] ?? ADJUSTMENT_PILL.percentage\n\n const adjustmentDisplay = adjustmentType === 'percentage'\n ? `${adjustmentValue > 0 ? '+' : ''}${adjustmentValue}%`\n : adjustmentType === 'fixed'\n ? `${adjustmentValue > 0 ? '+' : ''}${adjustmentValue}`\n : 'formula'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Input handle — always visible for interactive canvas */}\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-400\" />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(rule)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"rule\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <AdjustmentsHorizontalIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{rule.name}</h3>\n <p className=\"mt-0.5 text-xs font-medium text-gray-600 dark:text-gray-300\">{adjustmentDisplay}</p>\n </div>\n </div>\n\n {onToggle && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked={Boolean(rule.enabled)}\n onChange={() => onToggle(rule)}\n size=\"sm\"\n color=\"violet\"\n label={`${rule.name} enabled`}\n />\n </span>\n )}\n </div>\n\n {!isCompact && (\n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Badge color=\"violet\" size=\"xs\">{t('nodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={typePill}>{adjustmentType}</Badge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">P{String(rule.priority ?? '')}</span>\n {Array.isArray(rule.condition?.categories) && rule.condition.categories.length > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {rule.condition.categories.length} categories\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </div>\n )}\n </NodeCard>\n </button>\n\n {/* Output handle */}\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-400\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { TrashIcon, ExclamationTriangleIcon, CircleStackIcon } from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { EntityNodeData } from '../../types'\nimport { getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon } from '../../constants/entity-colors'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const EntityFlowNode = memo(function EntityFlowNode({ id, data, selected }: { id: string; data: EntityNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onEdit, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing config gracefully\n if (!config || config.type !== 'entity') {\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-blue-400\" />\n <NodeCard variant=\"error\" nodeType=\"entity\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || t('entityNodeType')}\n description={t('entityNotConfigured')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-blue-400\" />\n </>\n )\n }\n\n const entityKey = config.entityMasterId || data.entity?.id\n const fieldCount = config.selectedFields?.length ?? data.entity?.fields.length ?? 0\n const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0\n const EntityIcon = getEntityIcon(entityKey) ?? CircleStackIcon\n const gradient = getEntityGradient(entityKey)\n const badgeColor = getEntityBadgeColor(entityKey)\n const handleColor = getEntityHandleColor(entityKey)\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={handleColor} />\n\n <button\n type=\"button\"\n onClick={() => onEdit?.(id)}\n className=\"w-full text-left\"\n >\n <NodeCard compact={isCompact} selected={selected} nodeType=\"entity\">\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${gradient} shadow-lg`}>\n <EntityIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n {!isCompact && (\n <p className=\"mt-0.5 text-xs text-gray-500 dark:text-gray-400\">{data.entity?.label ?? config.entityMasterId}</p>\n )}\n </div>\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <Badge color=\"zinc\" size=\"xs\" className={badgeColor}>{t('entityNodeType')}</Badge>\n <Badge color=\"zinc\" size=\"xs\" className={badgeColor}>{fieldCount} {t('entityFields')}</Badge>\n {config.limit > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {t('entityLimit', { count: config.limit })}\n </span>\n )}\n {filterCount > 0 && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {filterCount} {t('entityFilters')}\n </span>\n )}\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n </button>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={handleColor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { PlayIcon } from '@heroicons/react/24/outline'\nimport type { StartNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const StartFlowNode = memo(function StartFlowNode({ id, data, selected }: { id: string; data: StartNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.inputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"start\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"start\">\n <PlayIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('startNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"start\">\n {t('startNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"start\" soft>\n {t('inputVariables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-green-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { StopIcon } from '@heroicons/react/24/outline'\nimport type { EndNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const EndFlowNode = memo(function EndFlowNode({ id, data, selected }: { id: string; data: EndNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.outputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-red-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"end\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"end\">\n <StopIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('endNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"end\">\n {t('endNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"end\" soft>\n {t('outputVariables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowsPointingOutIcon } from '@heroicons/react/24/outline'\nimport { StatusBadge } from '@ui/components/status-badge'\nimport type { IfElseNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IfElseFlowNode = memo(function IfElseFlowNode({ id, data, selected }: { id: string; data: IfElseNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const conditionCount = config?.conditions?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-amber-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"if_else\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"if_else\">\n <ArrowsPointingOutIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('ifElseNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"if_else\">\n {t('ifElseNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"if_else\" soft>\n {t('conditions')}: {conditionCount}\n </NodeCardBadge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {(config.logicalOperator ?? 'and').toUpperCase()}\n </span>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n\n <div className=\"pointer-events-none absolute -right-12 top-1/2 -translate-y-1/2\">\n <StatusBadge status=\"success\" label={t('ifBranchLabel')} size=\"sm\" />\n </div>\n <div className=\"pointer-events-none absolute bottom-[-1.9rem] left-1/2 -translate-x-1/2\">\n <StatusBadge status=\"error\" label={t('elseBranchLabel')} size=\"sm\" />\n </div>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"true-out\" colorClass=\"!bg-green-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"false-out\" colorClass=\"!bg-red-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { CodeBracketIcon } from '@heroicons/react/24/outline'\nimport type { CodeNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const CodeFlowNode = memo(function CodeFlowNode({ id, data, selected }: { id: string; data: CodeNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n // `code` node can be authored in two shapes: `{language, code}` script\n // (no runtime today) or `{operation, ...}` engine mini-language. Pick\n // the badge + preview from whichever shape this node uses.\n const isScripted = 'language' in config\n const badgeLabel = isScripted ? config.language : config.operation\n const codePreview = isScripted && config.code ? config.code.slice(0, 30) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"code\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"code\">\n <CodeBracketIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('codeNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"code\">\n {t('codeNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"code\" soft>\n {badgeLabel}\n </NodeCardBadge>\n {codePreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {codePreview}...\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { GlobeAltIcon } from '@heroicons/react/24/outline'\nimport type { HttpRequestNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const HttpRequestFlowNode = memo(function HttpRequestFlowNode({ id, data, selected }: { id: string; data: HttpRequestNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const urlPreview = config.url ? config.url.slice(0, 30) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-orange-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"http_request\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"http_request\">\n <GlobeAltIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('httpRequestNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"http_request\">\n {t('httpRequestNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"http_request\" soft>\n {config.method}\n </NodeCardBadge>\n {urlPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {urlPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-orange-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { DocumentTextIcon } from '@heroicons/react/24/outline'\nimport type { TemplateTransformNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const TemplateTransformFlowNode = memo(function TemplateTransformFlowNode({ id, data, selected }: { id: string; data: TemplateTransformNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-pink-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"template_transform\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"template_transform\">\n <DocumentTextIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('templateTransformNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"template_transform\">\n {t('templateTransformNode')}\n </NodeCardBadge>\n {config.outputVariable && (\n <NodeCardBadge tone=\"template_transform\" soft>\n {config.outputVariable}\n </NodeCardBadge>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-pink-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowPathIcon } from '@heroicons/react/24/outline'\nimport type { IterationNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IterationFlowNode = memo(function IterationFlowNode({ id, data, selected }: { id: string; data: IterationNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-indigo-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"iteration\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"iteration\">\n <ArrowPathIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('iterationNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"iteration\">\n {t('iterationNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"iteration\" soft>\n {t('maxIterations')}: {config?.maxIterations ?? 10}\n </NodeCardBadge>\n {config?.iteratorVariable && (\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {config.iteratorVariable}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-indigo-500\" />\n <WorkflowHandle type=\"source\" position={Position.Bottom} id=\"loop-out\" colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { BookOpenIcon } from '@heroicons/react/24/outline'\nimport type { KnowledgeBaseNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const KnowledgeBaseFlowNode = memo(function KnowledgeBaseFlowNode({ id, data, selected }: { id: string; data: KnowledgeBaseNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-emerald-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"knowledge_base\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"knowledge_base\">\n <BookOpenIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('knowledgeBaseNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"knowledge_base\">\n {t('knowledgeBaseNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"knowledge_base\" soft>\n {t('topK')}: {config.topK}\n </NodeCardBadge>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {t('similarity')}: {config.similarityThreshold}\n </span>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-emerald-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ChatBubbleLeftRightIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { AnswerNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AnswerFlowNode = memo(function AnswerFlowNode({ id, data, selected }: { id: string; data: AnswerNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const variableCount = config?.outputVariables?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.answer} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"answer\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"answer\">\n <ChatBubbleLeftRightIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('answerNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"answer\">\n {t('answerNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"answer\" soft>\n {t('variables')}: {variableCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { QuestionMarkCircleIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { QuestionClassifierNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const QuestionClassifierFlowNode = memo(function QuestionClassifierFlowNode({ id, data, selected }: { id: string; data: QuestionClassifierNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const categoryCount = config?.categories?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.question_classifier} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"question_classifier\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"question_classifier\">\n <QuestionMarkCircleIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('questionClassifierNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"question_classifier\">\n {t('questionClassifierNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"question_classifier\" soft>\n {t('categories')}: {categoryCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n {/* Dynamic output handles — one per category */}\n <WorkflowDynamicHandles\n count={categoryCount}\n idPrefix=\"category\"\n type=\"source\"\n position={Position.Right}\n colorClass={LOGIC_NODE_HANDLE_COLORS.question_classifier}\n keyIds={(config?.categories ?? []).map((category) => category.id)}\n />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { AdjustmentsVerticalIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { ParameterExtractorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ParameterExtractorFlowNode = memo(function ParameterExtractorFlowNode({ id, data, selected }: { id: string; data: ParameterExtractorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const parameterCount = config?.parameters?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.parameter_extractor} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"parameter_extractor\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"parameter_extractor\">\n <AdjustmentsVerticalIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('parameterExtractorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"parameter_extractor\">\n {t('parameterExtractorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"parameter_extractor\" soft>\n {t('parameters')}: {parameterCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.parameter_extractor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ArrowsRightLeftIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { VariableAssignerNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicTargetHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const VariableAssignerFlowNode = memo(function VariableAssignerFlowNode({ id, data, selected }: { id: string; data: VariableAssignerNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const assignmentCount = config?.assignments?.length ?? 0\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Dynamic input handles — one per assignment */}\n <WorkflowDynamicTargetHandles count={assignmentCount} idPrefix=\"assignment\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_assigner} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"variable_assigner\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"variable_assigner\">\n <ArrowsRightLeftIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('variableAssignerNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"variable_assigner\">\n {t('variableAssignerNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"variable_assigner\" soft>\n {t('assignments')}: {assignmentCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_assigner} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { Square3Stack3DIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { VariableAggregatorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowDynamicTargetHandles, WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const VariableAggregatorFlowNode = memo(function VariableAggregatorFlowNode({ id, data, selected }: { id: string; data: VariableAggregatorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const inputCount = config?.inputVariables?.length ?? 1\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n {/* Dynamic input handles — one per input variable */}\n <WorkflowDynamicTargetHandles count={inputCount} idPrefix=\"input\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_aggregator} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"variable_aggregator\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"variable_aggregator\">\n <Square3Stack3DIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('variableAggregatorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"variable_aggregator\">\n {t('variableAggregatorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"variable_aggregator\" soft>\n {t('inputs')}: {inputCount}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.variable_aggregator} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { DocumentMagnifyingGlassIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { DocumentExtractorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DocumentExtractorFlowNode = memo(function DocumentExtractorFlowNode({ id, data, selected }: { id: string; data: DocumentExtractorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const extractionMode = config.extractionMode\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.document_extractor} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"document_extractor\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"document_extractor\">\n <DocumentMagnifyingGlassIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('documentExtractorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"document_extractor\">\n {t('documentExtractorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"document_extractor\" soft>\n {extractionMode}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.document_extractor} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ListBulletIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { ListOperatorNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const ListOperatorFlowNode = memo(function ListOperatorFlowNode({ id, data, selected }: { id: string; data: ListOperatorNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const operationName = config.operation\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.list_operator} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"list_operator\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"list_operator\">\n <ListBulletIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('listOperatorNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"list_operator\">\n {t('listOperatorNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"list_operator\" soft>\n {operationName}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.list_operator} />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { PlayCircleIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_NODE_HANDLE_COLORS } from '../../constants/workflow-constants'\nimport type { IterationStartNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const IterationStartFlowNode = memo(function IterationStartFlowNode({ id, data, selected }: { id: string; data: IterationStartNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const iteratorVariable = config.iteratorVariable\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass={LOGIC_NODE_HANDLE_COLORS.iteration_start} />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"iteration_start\"\n width=\"w-[240px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"iteration_start\">\n <PlayCircleIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('iterationStartNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"iteration_start\">\n {t('iterationStartNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"iteration_start\" soft>\n {iteratorVariable || t('noVariable')}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass={LOGIC_NODE_HANDLE_COLORS.iteration_start} />\n </>\n )\n})\n","import { memo, useState, useCallback, useRef } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { PencilSquareIcon } from '@heroicons/react/24/outline'\nimport type { NoteNodeData } from '../../types'\nimport { getNodeStateClass } from '../../constants'\n\nconst NOTE_BACKGROUND_COLORS: Record<string, { light: string; dark: string }> = {\n yellow: { light: 'bg-yellow-50', dark: 'dark:bg-yellow-900/30' },\n blue: { light: 'bg-blue-50', dark: 'dark:bg-blue-900/30' },\n green: { light: 'bg-green-50', dark: 'dark:bg-green-900/30' },\n pink: { light: 'bg-pink-50', dark: 'dark:bg-pink-900/30' },\n purple: { light: 'bg-purple-50', dark: 'dark:bg-purple-900/30' },\n}\n\nconst NOTE_BORDER_COLORS: Record<string, string> = {\n yellow: 'border-yellow-300/60 dark:border-yellow-600/40',\n blue: 'border-blue-300/60 dark:border-blue-600/40',\n green: 'border-green-300/60 dark:border-green-600/40',\n pink: 'border-pink-300/60 dark:border-pink-600/40',\n purple: 'border-purple-300/60 dark:border-purple-600/40',\n}\n\nconst NOTE_ICON_COLORS: Record<string, string> = {\n yellow: 'text-yellow-600 dark:text-yellow-400',\n blue: 'text-blue-600 dark:text-blue-400',\n green: 'text-green-600 dark:text-green-400',\n pink: 'text-pink-600 dark:text-pink-400',\n purple: 'text-purple-600 dark:text-purple-400',\n}\n\nexport const NoteFlowNode = memo(function NoteFlowNode({ data, selected }: { id: string; data: NoteNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config } = data\n const [isEditing, setIsEditing] = useState(false)\n const [noteText, setNoteText] = useState(config.text)\n const textareaReference = useRef<HTMLTextAreaElement>(null)\n\n const noteColor = config.color || 'yellow'\n const noteWidth = config.width || 200\n const noteHeight = config.height || 150\n\n const backgroundColors = NOTE_BACKGROUND_COLORS[noteColor] || NOTE_BACKGROUND_COLORS.yellow\n const borderColor = NOTE_BORDER_COLORS[noteColor] || NOTE_BORDER_COLORS.yellow\n const iconColor = NOTE_ICON_COLORS[noteColor] || NOTE_ICON_COLORS.yellow\n\n const handleDoubleClick = useCallback(() => {\n setIsEditing(true)\n requestAnimationFrame(() => {\n textareaReference.current?.focus()\n })\n }, [])\n\n const handleBlur = useCallback(() => {\n setIsEditing(false)\n }, [])\n\n const handleTextChange = useCallback((event: React.ChangeEvent<HTMLTextAreaElement>) => {\n setNoteText(event.target.value)\n }, [])\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Escape') {\n setIsEditing(false)\n textareaReference.current?.blur()\n }\n }, [])\n\n return (\n <div\n className={`${getNodeStateClass(selected, 'note')} ${isEditing ? 'nodrag nopan' : ''} relative rounded-xl border ${borderColor} ${backgroundColors.light} ${backgroundColors.dark} p-3 shadow-sm transition-all`}\n style={{ width: noteWidth, minHeight: noteHeight }}\n onDoubleClick={handleDoubleClick}\n >\n {/* Note icon header */}\n <div className=\"mb-2 flex items-center gap-1.5\">\n <PencilSquareIcon className={`h-3.5 w-3.5 ${iconColor}`} />\n <span className={`text-[10px] font-medium ${iconColor}`}>{t('noteNode')}</span>\n </div>\n\n {/* Editable text area */}\n {isEditing ? (\n <textarea\n ref={textareaReference}\n value={noteText}\n onChange={handleTextChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n className=\"w-full resize-none border-none bg-transparent text-xs text-gray-700 outline-none placeholder:text-gray-400 dark:text-gray-200 dark:placeholder:text-gray-500\"\n style={{ minHeight: noteHeight - 40 }}\n placeholder={t('noteNodeDescription')}\n />\n ) : (\n <p\n className=\"cursor-text whitespace-pre-wrap text-xs text-gray-700 dark:text-gray-200\"\n style={{ minHeight: noteHeight - 40 }}\n >\n {noteText || (\n <span className=\"italic text-gray-400 dark:text-gray-500\">{t('noteNodeDescription')}</span>\n )}\n </p>\n )}\n </div>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { TrashIcon, ExclamationTriangleIcon, ServerStackIcon } from '@heroicons/react/24/outline'\nimport { ToggleSwitch } from '@ui/components/toggle-switch'\nimport type { DatasourceNodeData } from '../../types'\n\nconst DATASOURCE_LOGOS: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n mysql: '/logos/datasources/mysql.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n}\n\nfunction getDatasourceLogo(datasourceId: string, dialect?: string): string | null {\n const search = (dialect ?? datasourceId).toLowerCase()\n for (const [key, url] of Object.entries(DATASOURCE_LOGOS)) {\n if (search.includes(key)) return url\n }\n return null\n}\nimport { Badge } from '@ui/components/badge'\nimport { NodeCard } from './node-card'\nimport { NodeCardHeader, NodeCardMeta } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DatasourceFlowNode = memo(function DatasourceFlowNode({ id, data, selected }: { id: string; data: DatasourceNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, datasource, readOnly = false, onEdit, onRemoveFromCanvas } = data\n const isCompact = data.displayMode === 'compact'\n\n // Handle missing config gracefully\n if (!config || config.type !== 'datasource') {\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-400\" />\n <NodeCard variant=\"error\" nodeType=\"datasource\">\n <NodeCardHeader\n icon={<ExclamationTriangleIcon className=\"h-5 w-5 text-white\" />}\n title={label || t('datasourceNodeType')}\n description={t('datasourceNotConfigured')}\n iconClassName=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg\"\n />\n </NodeCard>\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-400\" />\n </>\n )\n }\n\n const columnCount = config.selectedColumns?.length ?? 0\n const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0\n const logo = getDatasourceLogo(config.datasourceId, config.dialect)\n\n const content = (\n <NodeCard compact={isCompact} selected={selected} nodeType=\"datasource\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n {logo ? (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl\">\n <img src={logo} alt={config.dialect ?? ''} className=\"h-8 w-8\" />\n </div>\n ) : (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-cyan-500 to-blue-600 shadow-lg\">\n <ServerStackIcon className=\"h-5 w-5 text-white\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n {!isCompact && (\n <p className=\"mt-0.5 line-clamp-1 text-xs text-gray-500 dark:text-gray-400\">\n {(datasource?.name ?? config.datasourceId)} · {config.table}\n </p>\n )}\n </div>\n </div>\n\n {!readOnly && (\n <span\n className=\"nodrag nopan\"\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n }}\n >\n <ToggleSwitch\n checked\n onChange={() => {}}\n disabled\n size=\"sm\"\n color=\"teal\"\n label={`${label} connected`}\n />\n </span>\n )}\n </div>\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-1.5\">\n {config.dialect && (\n <Badge color=\"cyan\" size=\"xs\">{config.dialect}</Badge>\n )}\n {readOnly && (\n <Badge color=\"zinc\" size=\"xs\">sample</Badge>\n )}\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {[\n columnCount > 0 ? `${columnCount} cols` : null,\n filterCount > 0 ? `${filterCount} filters` : null,\n config.limit > 0 ? `≤${config.limit}` : null,\n ].filter(Boolean).join(' · ')}\n </span>\n </div>\n\n {onRemoveFromCanvas && (\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation()\n event.preventDefault()\n onRemoveFromCanvas(id)\n }}\n className=\"nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n aria-label={t('removeFromCanvas')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </span>\n )}\n </NodeCardMeta>\n </NodeCard>\n )\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-cyan-400\" />\n\n {!onEdit ? (\n <div className=\"w-full\">{content}</div>\n ) : (\n <button\n type=\"button\"\n onClick={() => onEdit(id)}\n className=\"w-full text-left\"\n >\n {content}\n </button>\n )}\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-cyan-400\" />\n </>\n )\n})\n","import { memo, useCallback } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position, NodeResizer } from '@xyflow/react'\nimport {\n RectangleGroupIcon,\n ChevronUpIcon,\n ChevronDownIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\nimport { Badge } from '@ui/components/badge'\nimport type { GroupNodeData } from '../../types'\nimport { getNodeStateClass } from '../../constants'\nimport { NodeCard } from './node-card'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\ntype GroupColorScheme = {\n border: string\n header: string\n bg: string\n text: string\n resizerLine: string\n headerBg: string\n headerBorder: string\n iconText: string\n}\n\nconst GROUP_COLORS: Record<string, GroupColorScheme> = {\n indigo: {\n border: 'border-indigo-300/50 dark:border-indigo-600/50',\n header: 'from-indigo-400 to-indigo-500',\n bg: 'bg-indigo-50/30 dark:bg-indigo-950/20',\n text: 'text-indigo-700 dark:text-indigo-300',\n resizerLine: '#818cf8',\n headerBg: 'bg-indigo-500/15 dark:bg-indigo-400/15',\n headerBorder: 'border-b border-indigo-200/40 dark:border-indigo-500/20',\n iconText: 'text-indigo-600 dark:text-indigo-400',\n },\n teal: {\n border: 'border-teal-300/50 dark:border-teal-600/50',\n header: 'from-teal-400 to-teal-500',\n bg: 'bg-teal-50/30 dark:bg-teal-950/20',\n text: 'text-teal-700 dark:text-teal-300',\n resizerLine: '#2dd4bf',\n headerBg: 'bg-teal-500/15 dark:bg-teal-400/15',\n headerBorder: 'border-b border-teal-200/40 dark:border-teal-500/20',\n iconText: 'text-teal-600 dark:text-teal-400',\n },\n amber: {\n border: 'border-amber-300/50 dark:border-amber-600/50',\n header: 'from-amber-400 to-amber-500',\n bg: 'bg-amber-50/30 dark:bg-amber-950/20',\n text: 'text-amber-700 dark:text-amber-300',\n resizerLine: '#fbbf24',\n headerBg: 'bg-amber-500/15 dark:bg-amber-400/15',\n headerBorder: 'border-b border-amber-200/40 dark:border-amber-500/20',\n iconText: 'text-amber-600 dark:text-amber-400',\n },\n rose: {\n border: 'border-rose-300/50 dark:border-rose-600/50',\n header: 'from-rose-400 to-rose-500',\n bg: 'bg-rose-50/30 dark:bg-rose-950/20',\n text: 'text-rose-700 dark:text-rose-300',\n resizerLine: '#fb7185',\n headerBg: 'bg-rose-500/15 dark:bg-rose-400/15',\n headerBorder: 'border-b border-rose-200/40 dark:border-rose-500/20',\n iconText: 'text-rose-600 dark:text-rose-400',\n },\n slate: {\n border: 'border-slate-300/50 dark:border-slate-600/50',\n header: 'from-slate-400 to-gray-500',\n bg: 'bg-slate-50/30 dark:bg-slate-950/20',\n text: 'text-slate-700 dark:text-slate-300',\n resizerLine: '#94a3b8',\n headerBg: 'bg-slate-500/15 dark:bg-slate-400/15',\n headerBorder: 'border-b border-slate-200/40 dark:border-slate-500/20',\n iconText: 'text-slate-600 dark:text-slate-400',\n },\n}\n\nexport const GroupFlowNode = memo(function GroupFlowNode({ id, data, selected }: { id: string; data: GroupNodeData; selected?: boolean }) {\n const translations = useTranslations('agents.workflow')\n const { config, label, onEdit, onToggleExpand, onRemoveFromCanvas } = data\n const colorScheme = GROUP_COLORS[config.color] ?? GROUP_COLORS.slate\n\n const handleToggleExpand = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onToggleExpand?.(id)\n },\n [id, onToggleExpand]\n )\n\n const handleRemove = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onRemoveFromCanvas?.(id)\n },\n [id, onRemoveFromCanvas]\n )\n\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n onEdit?.(id)\n },\n [id, onEdit]\n )\n\n if (!config.isExpanded) {\n // Collapsed: compact single-node representation\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-slate-500\" />\n\n <NodeCard selected={selected} nodeType=\"group\" customBorder={colorScheme.border} className=\"cursor-pointer text-left\" onDoubleClick={handleDoubleClick}>\n <div className=\"flex items-start gap-3\">\n <div className={`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${colorScheme.header} shadow-lg`}>\n <RectangleGroupIcon className=\"h-5 w-5 text-white\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-white\">{label}</h3>\n <p className=\"mt-0.5 truncate text-xs text-gray-500 dark:text-gray-400\">\n {config.description || translations('groupNodeDescription')}\n </p>\n </div>\n </div>\n\n <div className=\"mt-2 flex items-center justify-between\">\n <Badge color=\"zinc\" size=\"xs\" className={colorScheme.text}>\n {translations('groupNode')}\n </Badge>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={handleToggleExpand}\n className=\"nodrag nopan rounded-lg p-1 opacity-0 transition hover:bg-gray-100 group-hover:opacity-100 dark:hover:bg-white/10\"\n title={translations('expandGroup')}\n >\n <ChevronDownIcon className=\"h-3.5 w-3.5 text-gray-500 dark:text-gray-400\" />\n </button>\n {onRemoveFromCanvas && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"nodrag nopan rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20\"\n title={translations('deleteGroup')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </button>\n )}\n </div>\n </div>\n </NodeCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-slate-500\" />\n </>\n )\n }\n\n // Expanded: full resizable container\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <NodeResizer\n minWidth={280}\n minHeight={200}\n isVisible={selected}\n lineStyle={{ borderColor: 'transparent' }}\n handleStyle={{ width: 8, height: 8, borderRadius: 4, backgroundColor: colorScheme.resizerLine, border: `2px solid rgba(255,255,255,0.5)` }}\n />\n\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-slate-500\" />\n\n <div\n className={`group relative h-full w-full overflow-hidden rounded-xl border liquid-surface ${getNodeStateClass(selected, undefined, colorScheme.border)} transition-all`}\n style={{ minWidth: config.width, minHeight: config.height }}\n >\n {/* Frosted glass header bar */}\n <div\n className={`nodrag nopan flex cursor-default items-center gap-2 rounded-t-xl backdrop-blur-xl ${colorScheme.headerBg} ${colorScheme.headerBorder} px-3 py-2`}\n onDoubleClick={handleDoubleClick}\n >\n <RectangleGroupIcon className={`h-4 w-4 ${colorScheme.iconText}`} />\n <div className=\"min-w-0 flex-1\">\n <span className={`block truncate text-xs font-semibold ${colorScheme.text}`}>{label}</span>\n {config.description && (\n <span className=\"block truncate text-[10px] text-gray-500 dark:text-gray-400\">{config.description}</span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={handleToggleExpand}\n className=\"nopan rounded-md p-0.5 transition hover:bg-black/5 dark:hover:bg-white/10\"\n title={translations('collapseGroup')}\n >\n <ChevronUpIcon className={`h-3.5 w-3.5 ${colorScheme.iconText}`} />\n </button>\n {onRemoveFromCanvas && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"nopan rounded-md p-0.5 transition hover:bg-red-500/10 dark:hover:bg-red-400/10\"\n title={translations('deleteGroup')}\n >\n <TrashIcon className=\"h-3.5 w-3.5 text-red-600 dark:text-red-400\" />\n </button>\n )}\n </div>\n\n {/* Child area — React Flow renders children with parentId automatically */}\n <div className=\"relative h-[calc(100%-36px)] w-full\" />\n </div>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-slate-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { MicrophoneIcon } from '@heroicons/react/24/outline'\nimport type { AudioInputNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const AudioInputFlowNode = memo(function AudioInputFlowNode({ id, data, selected }: { id: string; data: AudioInputNodeData; selected?: boolean }) {\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const urlPreview = config.url ? config.url.slice(0, 32) : ''\n const formatLabel = config.format && config.format.length > 0 ? config.format : 'auto'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-teal-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"audio_input\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"audio_input\">\n <MicrophoneIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description=\"Validates an audio source URL for downstream voice nodes\"\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"audio_input\">\n Audio Input\n </NodeCardBadge>\n <NodeCardBadge tone=\"audio_input\" soft>\n {formatLabel}\n </NodeCardBadge>\n {urlPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {urlPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-teal-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { Position } from '@xyflow/react'\nimport { SpeakerWaveIcon } from '@heroicons/react/24/outline'\nimport type { SpeechTranscriberNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const SpeechTranscriberFlowNode = memo(function SpeechTranscriberFlowNode({ id, data, selected }: { id: string; data: SpeechTranscriberNodeData; selected?: boolean }) {\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const model = config.model && config.model.length > 0 ? config.model : 'whisper-1'\n const language = config.language && config.language.length > 0 ? config.language : 'auto'\n const audioRefPreview = config.audioUrl ? config.audioUrl.slice(0, 32) : ''\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-violet-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"speech_transcriber\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"speech_transcriber\">\n <SpeakerWaveIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description=\"Transcribes audio via OpenAI Whisper-compatible endpoints\"\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"speech_transcriber\">\n Whisper\n </NodeCardBadge>\n <NodeCardBadge tone=\"speech_transcriber\" soft>\n {model}\n </NodeCardBadge>\n <NodeCardBadge tone=\"speech_transcriber\" soft>\n {language}\n </NodeCardBadge>\n {audioRefPreview && (\n <span className=\"truncate text-[10px] text-gray-400 dark:text-gray-500\">\n {audioRefPreview}\n </span>\n )}\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n\n <WorkflowHandle type=\"source\" position={Position.Right} id=\"right-out\" colorClass=\"!bg-violet-500\" />\n </>\n )\n})\n","import { memo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { Position } from '@xyflow/react'\nimport { ChartBarIcon } from '@heroicons/react/24/outline'\nimport type { DashboardOutputNodeData } from '../../types'\nimport { NodeCardBadge, NodeCardDeleteAction, NodeCardHeader, NodeCardMeta, NodeIconBubble, NodeInteractiveCard } from './node-card-primitives'\nimport { WorkflowHandle } from './node-handles'\nimport { NodeRunningIndicator } from './node-running-indicator'\n\nexport const DashboardOutputFlowNode = memo(function DashboardOutputFlowNode({ id, data, selected }: { id: string; data: DashboardOutputNodeData; selected?: boolean }) {\n const t = useTranslations('agents.workflow')\n const { config, label, onDelete, onEdit } = data\n const isCompact = data.displayMode === 'compact'\n const source = config?.dashboardFrom\n ? `← ${config.dashboardFrom}`\n : config?.dashboard\n ? 'inline'\n : 'unset'\n\n return (\n <>\n <NodeRunningIndicator nodeId={id} />\n <WorkflowHandle type=\"target\" position={Position.Left} id=\"left-in\" colorClass=\"!bg-fuchsia-500\" />\n\n <NodeInteractiveCard\n nodeId={id}\n onEdit={onEdit}\n compact={isCompact}\n selected={selected}\n nodeType=\"dashboard_output\"\n width=\"w-[260px]\"\n >\n <NodeCardHeader\n icon={\n <NodeIconBubble tone=\"dashboard_output\">\n <ChartBarIcon className=\"h-5 w-5 text-white\" />\n </NodeIconBubble>\n }\n title={label}\n description={t('dashboardOutputNodeDescription')}\n compact={isCompact}\n iconClassName=\"\"\n />\n\n <NodeCardMeta compact={isCompact}>\n <div className=\"flex items-center gap-2\">\n <NodeCardBadge tone=\"dashboard_output\">\n {t('dashboardOutputNode')}\n </NodeCardBadge>\n <NodeCardBadge tone=\"dashboard_output\" soft>\n {source}\n </NodeCardBadge>\n </div>\n <NodeCardDeleteAction nodeId={id} onDelete={onDelete} />\n </NodeCardMeta>\n </NodeInteractiveCard>\n </>\n )\n})\n","import { Button } from '@ui/index'\n\ntype ConfigFormActionsProps = {\n cancelLabel: string\n saveLabel: string\n onCancel: () => void\n onSave: () => void\n saveDisabled?: boolean\n}\n\nexport function ConfigFormActions({\n cancelLabel,\n saveLabel,\n onCancel,\n onSave,\n saveDisabled = false,\n}: ConfigFormActionsProps) {\n return (\n <div className=\"flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700\">\n <Button type=\"button\" outline onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button type=\"button\" onClick={onSave} disabled={saveDisabled}>\n {saveLabel}\n </Button>\n </div>\n )\n}\n","/**\n * VariableListEditor\n * ==================\n * Unified variable list editor for workflow config forms.\n * Compact inline rows with numbered badges, inline editing, and remove buttons.\n * Used by: start, end, answer, variable-aggregator, variable-assigner config forms.\n */\n\nimport { useState, useCallback, useRef, useEffect, type KeyboardEvent } from 'react'\nimport { PlusIcon, XMarkIcon } from '@heroicons/react/24/outline'\n\ntype VariableListEditorProps = {\n /** Current variable names */\n variables: string[]\n /** Called when the list changes */\n onChange: (variables: string[]) => void\n /** Placeholder for the add input */\n placeholder?: string\n /** Label shown above the list */\n label?: string\n /** Button label for adding */\n addLabel?: string\n /** Color theme: green (input), blue (output), purple (aggregator), red (end) */\n color?: 'green' | 'blue' | 'purple' | 'red' | 'teal'\n /** If true, show numbered badges */\n numbered?: boolean\n /** If true, variables are inline-editable */\n editable?: boolean\n /** Maximum number of variables (0 = unlimited) */\n max?: number\n}\n\nconst COLOR_CLASSES = {\n green: {\n badge: 'bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300',\n input: 'focus:border-green-400 focus:ring-green-400/20',\n row: 'border-green-200/30 dark:border-green-500/15',\n add: 'text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300',\n dot: 'bg-green-500',\n },\n blue: {\n badge: 'bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300',\n input: 'focus:border-blue-400 focus:ring-blue-400/20',\n row: 'border-blue-200/30 dark:border-blue-500/15',\n add: 'text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300',\n dot: 'bg-blue-500',\n },\n purple: {\n badge: 'bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300',\n input: 'focus:border-purple-400 focus:ring-purple-400/20',\n row: 'border-purple-200/30 dark:border-purple-500/15',\n add: 'text-purple-600 hover:text-purple-700 dark:text-purple-400 dark:hover:text-purple-300',\n dot: 'bg-purple-500',\n },\n red: {\n badge: 'bg-red-100 text-red-700 dark:bg-red-500/20 dark:text-red-300',\n input: 'focus:border-red-400 focus:ring-red-400/20',\n row: 'border-red-200/30 dark:border-red-500/15',\n add: 'text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300',\n dot: 'bg-red-500',\n },\n teal: {\n badge: 'bg-teal-100 text-teal-700 dark:bg-teal-500/20 dark:text-teal-300',\n input: 'focus:border-teal-400 focus:ring-teal-400/20',\n row: 'border-teal-200/30 dark:border-teal-500/15',\n add: 'text-teal-600 hover:text-teal-700 dark:text-teal-400 dark:hover:text-teal-300',\n dot: 'bg-teal-500',\n },\n}\n\nexport function VariableListEditor({\n variables,\n onChange,\n placeholder = 'Variable name',\n label,\n addLabel = 'Add',\n color = 'green',\n numbered = false,\n editable = false,\n max = 0,\n}: VariableListEditorProps) {\n const [newVariable, setNewVariable] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n const colors = COLOR_CLASSES[color]\n const canAdd = max === 0 || variables.length < max\n\n const handleAdd = useCallback(() => {\n const trimmed = newVariable.trim()\n if (!trimmed || variables.includes(trimmed)) return\n onChange([...variables, trimmed])\n setNewVariable('')\n inputRef.current?.focus()\n }, [newVariable, variables, onChange])\n\n const handleRemove = useCallback((index: number) => {\n onChange(variables.filter((_, i) => i !== index))\n }, [variables, onChange])\n\n const handleEdit = useCallback((index: number, value: string) => {\n const updated = [...variables]\n updated[index] = value\n onChange(updated)\n }, [variables, onChange])\n\n const handleKeyDown = useCallback((event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n handleAdd()\n }\n }, [handleAdd])\n\n return (\n <div>\n {label && (\n <label className=\"mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400\">{label}</label>\n )}\n\n {/* Variable list */}\n {variables.length > 0 && (\n <div className=\"mb-2 space-y-1\">\n {variables.map((variable, index) => (\n <div\n key={`${index}-${variable}`}\n className={`group flex items-center gap-2 rounded-lg border px-2.5 py-1.5 transition-colors ${colors.row} hover:bg-white/5`}\n >\n {/* Numbered badge or dot */}\n {numbered ? (\n <span className={`inline-flex h-5 min-w-5 items-center justify-center rounded-full text-[10px] font-bold ${colors.badge}`}>\n {index + 1}\n </span>\n ) : (\n <span className={`h-1.5 w-1.5 shrink-0 rounded-full ${colors.dot}`} />\n )}\n\n {/* Variable name — editable or static */}\n {editable ? (\n <input\n type=\"text\"\n value={variable}\n onChange={(event) => handleEdit(index, event.target.value)}\n className={`flex-1 rounded-md border-0 bg-transparent px-1 py-0.5 text-sm font-medium text-gray-900 outline-none ${colors.input} focus:ring-1 dark:text-white`}\n />\n ) : (\n <span className=\"flex-1 text-sm font-medium text-gray-900 dark:text-white\">{variable}</span>\n )}\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={() => handleRemove(index)}\n className=\"shrink-0 rounded p-0.5 text-gray-400 opacity-0 transition-all hover:bg-red-100 hover:text-red-500 group-hover:opacity-100 dark:hover:bg-red-500/10 dark:hover:text-red-400\"\n aria-label={`Remove ${variable}`}\n >\n <XMarkIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Add input */}\n {canAdd && (\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n type=\"text\"\n value={newVariable}\n onChange={(event) => setNewVariable(event.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 rounded-lg border border-gray-200/50 bg-gray-50/50 px-3 py-1.5 text-sm text-gray-700 outline-none transition-colors placeholder:text-gray-400 focus:border-gray-300 focus:ring-1 focus:ring-gray-300/30 dark:border-white/10 dark:bg-white/5 dark:text-gray-300 dark:placeholder:text-gray-600\"\n />\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!newVariable.trim()}\n className={`flex items-center gap-1 rounded-lg px-3 py-1.5 text-xs font-semibold transition-all disabled:cursor-not-allowed disabled:opacity-40 ${colors.add} hover:bg-white/10`}\n >\n <PlusIcon className=\"h-3.5 w-3.5\" />\n {addLabel}\n </button>\n </div>\n )}\n\n {/* Empty state */}\n {variables.length === 0 && !canAdd && (\n <p className=\"text-xs text-gray-400 dark:text-gray-500\">No variables defined</p>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { StartNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype StartNodeConfigFormProps = {\n config: StartNodeConfig\n onSave: (config: StartNodeConfig) => void\n onCancel: () => void\n}\n\nexport function StartNodeConfigForm({ config, onSave, onCancel }: StartNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.startNodeConfig')\n const [inputVariables, setInputVariables] = useState<string[]>([...config.inputVariables])\n\n const handleSave = () => {\n onSave({ ...config, inputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('inputVariablesHelp')}</p>\n <VariableListEditor\n variables={inputVariables}\n onChange={setInputVariables}\n label={t('inputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"green\"\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { EndNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype EndNodeConfigFormProps = {\n config: EndNodeConfig\n onSave: (config: EndNodeConfig) => void\n onCancel: () => void\n}\n\nexport function EndNodeConfigForm({ config, onSave, onCancel }: EndNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.endNodeConfig')\n const [outputVariables, setOutputVariables] = useState<string[]>([...config.outputVariables])\n\n const handleSave = () => {\n onSave({ ...config, outputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('outputVariablesHelp')}</p>\n <VariableListEditor\n variables={outputVariables}\n onChange={setOutputVariables}\n label={t('outputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"red\"\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Button, FormInput, FormSelect, IconButton } from '@ui/index'\nimport type { IfElseNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IfElseCondition = {\n variable: string\n operator: string\n value: string\n}\n\ntype IfElseNodeConfigFormProps = {\n config: IfElseNodeConfig\n onSave: (config: IfElseNodeConfig) => void\n onCancel: () => void\n}\n\nconst OPERATOR_OPTIONS = [\n { value: 'equals', labelKey: 'operatorEquals' },\n { value: 'not_equals', labelKey: 'operatorNotEquals' },\n { value: 'contains', labelKey: 'operatorContains' },\n { value: 'greater_than', labelKey: 'operatorGreaterThan' },\n { value: 'less_than', labelKey: 'operatorLessThan' },\n { value: 'is_empty', labelKey: 'operatorIsEmpty' },\n { value: 'is_not_empty', labelKey: 'operatorIsNotEmpty' },\n] as const\n\nexport function IfElseNodeConfigForm({ config, onSave, onCancel }: IfElseNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.ifElseNodeConfig')\n const [conditions, setConditions] = useState<IfElseCondition[]>(\n config.conditions.map((condition) => ({\n variable: condition.variable,\n operator: condition.operator,\n value: condition.value,\n }))\n )\n const [logicalOperator, setLogicalOperator] = useState<'and' | 'or'>(config.logicalOperator)\n\n const handleAddCondition = () => {\n setConditions([...conditions, { variable: '', operator: 'equals', value: '' }])\n }\n\n const handleRemoveCondition = (index: number) => {\n setConditions(conditions.filter((_, conditionIndex) => conditionIndex !== index))\n }\n\n const handleConditionChange = (index: number, field: keyof IfElseCondition, fieldValue: string) => {\n setConditions(conditions.map((condition, conditionIndex) =>\n conditionIndex === index ? { ...condition, [field]: fieldValue } : condition\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n conditions: conditions.map((condition) => ({\n variable: condition.variable,\n operator: condition.operator,\n value: condition.value,\n })),\n logicalOperator,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{t('conditionsLabel')}</label>\n <Button\n type=\"button\"\n onClick={handleAddCondition}\n >\n {t('addCondition')}\n </Button>\n </div>\n\n <div className=\"space-y-3\">\n {conditions.map((condition, index) => (\n <div key={index} className=\"flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"grid flex-1 grid-cols-3 gap-2\">\n <div>\n <FormInput\n type=\"text\"\n label={t('variableLabel')}\n value={condition.variable}\n onValueChange={(value) => handleConditionChange(index, 'variable', value)}\n placeholder={t('variableLabel')}\n inputSize=\"sm\"\n />\n </div>\n <div>\n <FormSelect\n label={t('operatorLabel')}\n value={condition.operator}\n onValueChange={(value) => handleConditionChange(index, 'operator', value)}\n options={OPERATOR_OPTIONS.map((option) => ({ value: option.value, label: t(option.labelKey) }))}\n inputSize=\"sm\"\n />\n </div>\n <div>\n <FormInput\n type=\"text\"\n label={t('valueLabel')}\n value={condition.value}\n onValueChange={(value) => handleConditionChange(index, 'value', value)}\n placeholder={t('valueLabel')}\n inputSize=\"sm\"\n />\n </div>\n </div>\n {conditions.length > 1 && (\n <IconButton\n onClick={() => handleRemoveCondition(index)}\n icon={<TrashIcon className=\"h-4 w-4\" />}\n label={t('removeCondition')}\n size=\"sm\"\n color=\"ios-red\"\n className=\"mt-5\"\n />\n )}\n </div>\n ))}\n </div>\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">{t('logicalOperatorLabel')}</label>\n <div className=\"flex gap-2\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name=\"logicalOperator\"\n value=\"and\"\n checked={logicalOperator === 'and'}\n onChange={() => setLogicalOperator('and')}\n className=\"text-indigo-600 focus:ring-indigo-400\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">AND</span>\n </label>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name=\"logicalOperator\"\n value=\"or\"\n checked={logicalOperator === 'or'}\n onChange={() => setLogicalOperator('or')}\n className=\"text-indigo-600 focus:ring-indigo-400\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">OR</span>\n </label>\n </div>\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useMemo, useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { CodeNodeConfig, CodeOperation } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype CodeNodeConfigFormProps = {\n config: CodeNodeConfig\n onSave: (config: CodeNodeConfig) => void\n onCancel: () => void\n}\n\n/// Two authoring modes:\n/// • **scripted** — language + code. Kept so JS/Python-first users can\n/// sketch logic ahead of the sandboxed runtime landing.\n/// • **operation** — one of the engine's JSON-only mini-language ops.\n/// This is what real graphs use (any RSS/regex/JSON-parsing step).\ntype Mode = 'scripted' | 'operation'\n\nconst LANGUAGE_OPTIONS = ['javascript', 'python', 'typescript'] as const\n\nconst OPERATION_OPTIONS: { value: CodeOperation; label: string; help: string }[] = [\n { value: 'passthrough', label: 'passthrough', help: 'Emit the incoming value unchanged.' },\n { value: 'return', label: 'return', help: 'Emit a literal JSON value.' },\n { value: 'merge', label: 'merge', help: 'Shallow-merge incoming + a literal object.' },\n { value: 'pick', label: 'pick', help: 'Project specific keys off the incoming object.' },\n { value: 'parse_json', label: 'parse_json', help: 'Parse a stringified JSON out of an upstream field (e.g. an agent\\'s `.text`).' },\n { value: 'regex_extract', label: 'regex_extract', help: 'Run a regex over `from`, return the capture group.' },\n { value: 'xml_titles', label: 'xml_titles', help: 'Extract every `<title>` from an RSS/Atom body.' },\n]\n\nfunction hasLanguage(config: CodeNodeConfig): config is Extract<CodeNodeConfig, { language: unknown }> {\n return 'language' in config && typeof config.language === 'string'\n}\nfunction hasOperation(config: CodeNodeConfig): config is Extract<CodeNodeConfig, { operation: CodeOperation }> {\n return 'operation' in config && typeof config.operation === 'string'\n}\n\nexport function CodeNodeConfigForm({ config, onSave, onCancel }: CodeNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.codeNodeConfig')\n\n const initialMode: Mode = hasOperation(config) ? 'operation' : 'scripted'\n const [mode, setMode] = useState<Mode>(initialMode)\n\n // Scripted-mode state\n const [language, setLanguage] = useState<'javascript' | 'python' | 'typescript'>(\n hasLanguage(config) ? config.language : 'javascript',\n )\n const [code, setCode] = useState(hasLanguage(config) ? config.code : '')\n\n // Operation-mode state\n const op0 = hasOperation(config) ? config : undefined\n const [operation, setOperation] = useState<CodeOperation>(op0?.operation ?? 'passthrough')\n const [from, setFrom] = useState<string>(op0?.from ?? '')\n const [valueText, setValueText] = useState<string>(\n op0?.value !== undefined ? JSON.stringify(op0.value, null, 2) : '',\n )\n const [fieldsText, setFieldsText] = useState<string>((op0?.fields ?? []).join(', '))\n const [pattern, setPattern] = useState<string>(op0?.pattern ?? '')\n const [flags, setFlags] = useState<string>(op0?.flags ?? '')\n const [group, setGroup] = useState<number>(op0?.group ?? 1)\n const [output, setOutput] = useState<string>(op0?.output ?? '')\n const [keepChannel, setKeepChannel] = useState<boolean>(op0?.keepChannel ?? false)\n\n const selectedOpHelp = useMemo(\n () => OPERATION_OPTIONS.find((o) => o.value === operation)?.help ?? '',\n [operation],\n )\n\n const handleSave = () => {\n if (mode === 'scripted') {\n onSave({ type: 'code', language, code })\n return\n }\n const next: CodeNodeConfig = { type: 'code', operation }\n if (from.trim()) next.from = from.trim()\n if (operation === 'return' && valueText.trim()) {\n try { next.value = JSON.parse(valueText) } catch { next.value = valueText }\n }\n if (operation === 'merge' && valueText.trim()) {\n try { next.value = JSON.parse(valueText) } catch { next.value = valueText }\n }\n if (operation === 'pick') {\n next.fields = fieldsText.split(',').map((s) => s.trim()).filter(Boolean)\n }\n if (operation === 'regex_extract') {\n next.pattern = pattern\n if (flags.trim()) next.flags = flags.trim()\n if (group !== 1) next.group = group\n }\n if (operation === 'xml_titles' && keepChannel) next.keepChannel = true\n if ((operation === 'regex_extract' || operation === 'xml_titles') && output.trim()) {\n next.output = output.trim()\n }\n onSave(next)\n }\n\n const labelClass = 'mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300'\n const inputClass = 'w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500'\n const textareaClass = `${inputClass} font-mono text-xs`\n\n return (\n <div className=\"space-y-4\">\n {/* ── Mode selector ────────────────────────────────────────── */}\n <div className=\"flex gap-2 rounded-lg bg-gray-100 p-1 text-sm dark:bg-gray-800\">\n <button\n type=\"button\"\n onClick={() => setMode('operation')}\n className={`flex-1 rounded-md px-3 py-1.5 font-medium transition ${\n mode === 'operation'\n ? 'bg-white text-indigo-600 shadow-sm dark:bg-gray-900 dark:text-indigo-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {t('modeOperation', { _: 'Operation' } as never)}\n </button>\n <button\n type=\"button\"\n onClick={() => setMode('scripted')}\n className={`flex-1 rounded-md px-3 py-1.5 font-medium transition ${\n mode === 'scripted'\n ? 'bg-white text-indigo-600 shadow-sm dark:bg-gray-900 dark:text-indigo-400'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n {t('modeScripted', { _: 'Scripted' } as never)}\n </button>\n </div>\n\n {mode === 'scripted' ? (\n <>\n <div>\n <label className={labelClass}>{t('languageLabel')}</label>\n <select\n value={language}\n onChange={(event) => setLanguage(event.target.value as typeof language)}\n className={inputClass}\n >\n {LANGUAGE_OPTIONS.map((option) => (\n <option key={option} value={option}>{option}</option>\n ))}\n </select>\n <p className=\"mt-1 text-[11px] text-amber-600 dark:text-amber-400\">\n The engine has no embedded script runtime — scripted nodes fail\n at execution today. Prefer the Operation mode for real graphs.\n </p>\n </div>\n\n <div>\n <label className={labelClass}>{t('codeLabel')}</label>\n <textarea\n value={code}\n onChange={(event) => setCode(event.target.value)}\n placeholder={t('codePlaceholder')}\n rows={10}\n className={textareaClass}\n />\n </div>\n </>\n ) : (\n <>\n <div>\n <label className={labelClass}>Operation</label>\n <select\n value={operation}\n onChange={(event) => setOperation(event.target.value as CodeOperation)}\n className={inputClass}\n >\n {OPERATION_OPTIONS.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">{selectedOpHelp}</p>\n </div>\n\n {/* `from` applies to every op except `return` (which has no input) */}\n {operation !== 'return' && (\n <div>\n <label className={labelClass}>from</label>\n <input\n type=\"text\"\n value={from}\n onChange={(event) => setFrom(event.target.value)}\n placeholder=\"e.g. http-news.body\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n Dotted reference into the variable pool. Leave blank to read the sole incoming edge.\n </p>\n </div>\n )}\n\n {(operation === 'return' || operation === 'merge') && (\n <div>\n <label className={labelClass}>\n value {operation === 'merge' ? '(object to merge in)' : '(literal JSON)'}\n </label>\n <textarea\n value={valueText}\n onChange={(event) => setValueText(event.target.value)}\n placeholder='{\"recommendedPrice\": 6.29}'\n rows={6}\n className={textareaClass}\n />\n </div>\n )}\n\n {operation === 'pick' && (\n <div>\n <label className={labelClass}>fields</label>\n <input\n type=\"text\"\n value={fieldsText}\n onChange={(event) => setFieldsText(event.target.value)}\n placeholder=\"id, name, state\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">Comma-separated keys to project.</p>\n </div>\n )}\n\n {operation === 'regex_extract' && (\n <>\n <div>\n <label className={labelClass}>pattern</label>\n <input\n type=\"text\"\n value={pattern}\n onChange={(event) => setPattern(event.target.value)}\n placeholder={`R\\\\$(\\\\d+\\\\.\\\\d+)`}\n className={`${inputClass} font-mono text-xs`}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className={labelClass}>flags</label>\n <input\n type=\"text\"\n value={flags}\n onChange={(event) => setFlags(event.target.value)}\n placeholder=\"e.g. i or ims\"\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">i, m, s, x, U, R (g is implicit).</p>\n </div>\n <div>\n <label className={labelClass}>group</label>\n <input\n type=\"number\"\n value={group}\n onChange={(event) => setGroup(Number(event.target.value) || 0)}\n min={0}\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">0 = whole match, 1 = first capture group (default).</p>\n </div>\n </div>\n </>\n )}\n\n {operation === 'xml_titles' && (\n <label className=\"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n checked={keepChannel}\n onChange={(event) => setKeepChannel(event.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n Keep channel/feed title (default: drop the first `&lt;title&gt;`).\n </label>\n )}\n\n {(operation === 'regex_extract' || operation === 'xml_titles') && (\n <div>\n <label className={labelClass}>output key</label>\n <input\n type=\"text\"\n value={output}\n onChange={(event) => setOutput(event.target.value)}\n placeholder={operation === 'regex_extract' ? 'matches' : 'titles'}\n className={inputClass}\n />\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n Defaults to `{operation === 'regex_extract' ? 'matches' : 'titles'}` if left blank.\n </p>\n </div>\n )}\n </>\n )}\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport { Button, FormInput, FormSelect, FormTextarea, IconButton } from '@ui/index'\nimport type { HttpRequestNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype HeaderEntry = {\n key: string\n value: string\n}\n\ntype HttpRequestNodeConfigFormProps = {\n config: HttpRequestNodeConfig\n onSave: (config: HttpRequestNodeConfig) => void\n onCancel: () => void\n}\n\nconst HTTP_METHODS = ['GET', 'POST', 'PUT', 'DELETE'] as const\n\nfunction headersToEntries(headers: Record<string, string>): HeaderEntry[] {\n return Object.entries(headers).map(([key, value]) => ({ key, value }))\n}\n\nfunction entriesToHeaders(entries: HeaderEntry[]): Record<string, string> {\n const headers: Record<string, string> = {}\n for (const entry of entries) {\n if (entry.key.trim()) {\n headers[entry.key.trim()] = entry.value\n }\n }\n return headers\n}\n\nexport function HttpRequestNodeConfigForm({ config, onSave, onCancel }: HttpRequestNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.httpRequestNodeConfig')\n const [method, setMethod] = useState<HttpRequestNodeConfig['method']>(config.method)\n const [url, setUrl] = useState(config.url)\n const [headerEntries, setHeaderEntries] = useState<HeaderEntry[]>(headersToEntries(config.headers))\n const [body, setBody] = useState(config.body ?? '')\n const [timeoutMs, setTimeoutMs] = useState(config.timeoutMs)\n const [parseResponse, setParseResponse] = useState<NonNullable<HttpRequestNodeConfig['parseResponse']>>(config.parseResponse ?? 'json')\n\n const handleAddHeader = () => {\n setHeaderEntries([...headerEntries, { key: '', value: '' }])\n }\n\n const handleRemoveHeader = (index: number) => {\n setHeaderEntries(headerEntries.filter((_, headerIndex) => headerIndex !== index))\n }\n\n const handleHeaderChange = (index: number, field: keyof HeaderEntry, fieldValue: string) => {\n setHeaderEntries(headerEntries.map((entry, headerIndex) =>\n headerIndex === index ? { ...entry, [field]: fieldValue } : entry\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n method,\n url,\n headers: entriesToHeaders(headerEntries),\n body: method === 'GET' ? '' : body,\n timeoutMs,\n parseResponse,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormSelect\n label={t('methodLabel')}\n value={method}\n onValueChange={(value) => setMethod(value as HttpRequestNodeConfig['method'])}\n options={HTTP_METHODS.map((httpMethod) => ({ value: httpMethod, label: httpMethod }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('urlLabel')}\n value={url}\n onValueChange={setUrl}\n placeholder={t('urlPlaceholder')}\n />\n\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">{t('headersLabel')}</label>\n <Button\n type=\"button\"\n onClick={handleAddHeader}\n >\n {t('addHeader')}\n </Button>\n </div>\n <div className=\"space-y-2\">\n {headerEntries.map((entry, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <FormInput\n type=\"text\"\n value={entry.key}\n onValueChange={(value) => handleHeaderChange(index, 'key', value)}\n placeholder={t('headerKeyPlaceholder')}\n className=\"flex-1\"\n />\n <FormInput\n type=\"text\"\n value={entry.value}\n onValueChange={(value) => handleHeaderChange(index, 'value', value)}\n placeholder={t('headerValuePlaceholder')}\n className=\"flex-1\"\n />\n <IconButton\n onClick={() => handleRemoveHeader(index)}\n icon={<TrashIcon className=\"h-4 w-4\" />}\n label={t('removeHeader')}\n size=\"sm\"\n color=\"ios-red\"\n />\n </div>\n ))}\n </div>\n </div>\n\n {method !== 'GET' && (\n <FormTextarea\n label={t('bodyLabel')}\n value={body}\n onValueChange={setBody}\n placeholder={t('bodyPlaceholder')}\n rows={5}\n className=\"font-mono text-xs\"\n />\n )}\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n max={60000}\n step={1000}\n />\n\n <FormSelect\n label={t('parseResponseLabel')}\n value={parseResponse}\n onValueChange={(value) => setParseResponse(value as 'json' | 'text')}\n options={[\n { value: 'json', label: t('parseResponseJson') },\n { value: 'text', label: t('parseResponseText') },\n ]}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { S3WriteNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype S3WriteNodeConfigFormProps = {\n config: S3WriteNodeConfig\n onSave: (config: S3WriteNodeConfig) => void\n onCancel: () => void\n}\n\nexport function S3WriteNodeConfigForm({ config, onSave, onCancel }: S3WriteNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.s3WriteNodeConfig')\n const [bucket, setBucket] = useState(config.bucket ?? '')\n const [key, setKey] = useState(config.key ?? '')\n const [sourceUrl, setSourceUrl] = useState(config.sourceUrl ?? '')\n const [body, setBody] = useState(config.body ?? '')\n const [contentType, setContentType] = useState(config.contentType ?? '')\n const [timeoutMs, setTimeoutMs] = useState<number>(config.timeoutMs ?? 300000)\n const [connectionId, setConnectionId] = useState(config.connectionId ?? '')\n\n const handleSave = () => {\n onSave({\n ...config,\n bucket,\n key,\n sourceUrl,\n body,\n contentType,\n timeoutMs,\n connectionId,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('bucketLabel')}\n value={bucket}\n onValueChange={setBucket}\n placeholder={t('bucketPlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('keyLabel')}\n value={key}\n onValueChange={setKey}\n placeholder={t('keyPlaceholder')}\n />\n\n <div className=\"rounded-lg border border-cyan-200/40 bg-cyan-50/40 px-3 py-2 text-[11px] text-cyan-900 dark:border-cyan-500/30 dark:bg-cyan-500/10 dark:text-cyan-100\">\n {t('sourceOrBodyHint')}\n </div>\n\n <FormInput\n type=\"text\"\n label={t('sourceUrlLabel')}\n value={sourceUrl}\n onValueChange={setSourceUrl}\n placeholder={t('sourceUrlPlaceholder')}\n />\n\n <FormTextarea\n label={t('bodyLabel')}\n value={body}\n onValueChange={setBody}\n placeholder={t('bodyPlaceholder')}\n rows={5}\n className=\"font-mono text-xs\"\n />\n\n <FormInput\n type=\"text\"\n label={t('contentTypeLabel')}\n value={contentType}\n onValueChange={setContentType}\n placeholder=\"application/json\"\n />\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n step={1000}\n />\n\n <FormInput\n type=\"text\"\n label={t('connectionIdLabel')}\n value={connectionId}\n onValueChange={setConnectionId}\n placeholder={t('connectionIdHelp')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { TemplateTransformNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype TemplateTransformNodeConfigFormProps = {\n config: TemplateTransformNodeConfig\n onSave: (config: TemplateTransformNodeConfig) => void\n onCancel: () => void\n}\n\nexport function TemplateTransformNodeConfigForm({ config, onSave, onCancel }: TemplateTransformNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.templateTransformNodeConfig')\n const [template, setTemplate] = useState(config.template)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n\n const handleSave = () => {\n onSave({ ...config, template, outputVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormTextarea\n label={t('templateLabel')}\n value={template}\n onValueChange={setTemplate}\n placeholder={t('templatePlaceholder')}\n rows={6}\n className=\"font-mono text-xs\"\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { IterationNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IterationNodeConfigFormProps = {\n config: IterationNodeConfig\n onSave: (config: IterationNodeConfig) => void\n onCancel: () => void\n}\n\nexport function IterationNodeConfigForm({ config, onSave, onCancel }: IterationNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.iterationNodeConfig')\n const [iteratorVariable, setIteratorVariable] = useState(config.iteratorVariable)\n const [maxIterations, setMaxIterations] = useState(config.maxIterations)\n\n const handleSave = () => {\n onSave({ ...config, iteratorVariable, maxIterations })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('iteratorVariableLabel')}\n value={iteratorVariable}\n onValueChange={setIteratorVariable}\n placeholder={t('iteratorVariablePlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('maxIterationsLabel')}\n value={String(maxIterations)}\n onValueChange={(value) => setMaxIterations(Number(value))}\n min={1}\n max={10000}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { KnowledgeBaseNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype KnowledgeBaseNodeConfigFormProps = {\n config: KnowledgeBaseNodeConfig\n onSave: (config: KnowledgeBaseNodeConfig) => void\n onCancel: () => void\n}\n\nexport function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }: KnowledgeBaseNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.knowledgeBaseNodeConfig')\n const [sourceId, setSourceId] = useState(config.sourceId)\n const [topK, setTopK] = useState(config.topK)\n const [similarityThreshold, setSimilarityThreshold] = useState(config.similarityThreshold)\n\n const handleSave = () => {\n onSave({ ...config, sourceId, topK, similarityThreshold })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('sourceIdLabel')}\n value={sourceId}\n onValueChange={setSourceId}\n placeholder={t('sourceIdPlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('topKLabel')}\n value={String(topK)}\n onValueChange={(value) => setTopK(Number(value))}\n min={1}\n max={20}\n />\n\n <FormInput\n type=\"number\"\n label={t('similarityThresholdLabel')}\n value={String(similarityThreshold)}\n onValueChange={(value) => setSimilarityThreshold(Number(value))}\n min={0}\n max={1}\n step={0.1}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormTextarea } from '@ui/index'\nimport type { AnswerNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype AnswerNodeConfigFormProps = {\n config: AnswerNodeConfig\n onSave: (config: AnswerNodeConfig) => void\n onCancel: () => void\n}\n\nexport function AnswerNodeConfigForm({ config, onSave, onCancel }: AnswerNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.answerNodeConfig')\n const [outputTemplate, setOutputTemplate] = useState(config.outputTemplate)\n const [outputVariables, setOutputVariables] = useState<string[]>([...config.outputVariables])\n\n const handleSave = () => {\n onSave({ ...config, outputTemplate, outputVariables })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormTextarea\n label={t('outputTemplateLabel')}\n hint={t('outputTemplateHelp')}\n value={outputTemplate}\n onValueChange={setOutputTemplate}\n placeholder={t('outputTemplatePlaceholder')}\n rows={6}\n className=\"font-mono text-xs\"\n />\n\n <VariableListEditor\n variables={outputVariables}\n onChange={setOutputVariables}\n label={t('outputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addVariable')}\n color=\"blue\"\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { QuestionClassifierNodeConfig } from '../../contracts'\n\ntype ClassifierCategory = {\n id: string\n name: string\n description: string\n}\n\ntype QuestionClassifierNodeConfigFormProps = {\n config: QuestionClassifierNodeConfig\n onSave: (config: QuestionClassifierNodeConfig) => void\n onCancel: () => void\n}\n\nexport function QuestionClassifierNodeConfigForm({ config, onSave, onCancel }: QuestionClassifierNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.questionClassifierNodeConfig')\n const [modelId, setModelId] = useState(config.modelId)\n const [instructions, setInstructions] = useState(config.instructions)\n const [categories, setCategories] = useState<ClassifierCategory[]>(\n config.categories.map((category) => ({ ...category }))\n )\n\n const handleAddCategory = () => {\n setCategories([...categories, { id: `cat-${Date.now()}`, name: '', description: '' }])\n }\n\n const handleRemoveCategory = (index: number) => {\n if (categories.length <= 2) return\n setCategories(categories.filter((_, categoryIndex) => categoryIndex !== index))\n }\n\n const handleCategoryChange = (index: number, field: keyof ClassifierCategory, fieldValue: string) => {\n setCategories(categories.map((category, categoryIndex) =>\n categoryIndex === index ? { ...category, [field]: fieldValue } : category\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n modelId,\n instructions,\n categories: categories.map((category) => ({\n id: category.id,\n name: category.name,\n description: category.description,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('modelIdLabel')}\n </label>\n <input\n type=\"text\"\n value={modelId}\n onChange={(event) => setModelId(event.target.value)}\n placeholder={t('modelIdPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('instructionsLabel')}\n </label>\n <textarea\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n placeholder={t('instructionsPlaceholder')}\n rows={4}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('categoriesLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddCategory}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addCategory')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {categories.map((category, index) => (\n <div key={category.id} className=\"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-xs font-medium text-gray-500 dark:text-gray-400\">\n {t('categoryIndex', { index: index + 1 })}\n </span>\n {categories.length > 2 && (\n <button\n type=\"button\"\n onClick={() => handleRemoveCategory(index)}\n className=\"text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeCategory')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={category.name}\n onChange={(event) => handleCategoryChange(index, 'name', event.target.value)}\n placeholder={t('categoryNamePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n <input\n type=\"text\"\n value={category.description}\n onChange={(event) => handleCategoryChange(index, 'description', event.target.value)}\n placeholder={t('categoryDescriptionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { ParameterExtractorNodeConfig } from '../../contracts'\n\ntype ExtractorParameter = {\n name: string\n type: 'string' | 'number' | 'boolean' | 'array'\n description: string\n required: boolean\n}\n\ntype ParameterExtractorNodeConfigFormProps = {\n config: ParameterExtractorNodeConfig\n onSave: (config: ParameterExtractorNodeConfig) => void\n onCancel: () => void\n}\n\nconst PARAMETER_TYPES = ['string', 'number', 'boolean', 'array'] as const\n\nexport function ParameterExtractorNodeConfigForm({ config, onSave, onCancel }: ParameterExtractorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.parameterExtractorNodeConfig')\n const [modelId, setModelId] = useState(config.modelId)\n const [parameters, setParameters] = useState<ExtractorParameter[]>(\n config.parameters.map((parameter) => ({ ...parameter }))\n )\n\n const handleAddParameter = () => {\n setParameters([...parameters, { name: '', type: 'string', description: '', required: false }])\n }\n\n const handleRemoveParameter = (index: number) => {\n setParameters(parameters.filter((_, parameterIndex) => parameterIndex !== index))\n }\n\n const handleParameterChange = (index: number, field: keyof ExtractorParameter, fieldValue: string | boolean) => {\n setParameters(parameters.map((parameter, parameterIndex) =>\n parameterIndex === index ? { ...parameter, [field]: fieldValue } : parameter\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n modelId,\n parameters: parameters.map((parameter) => ({\n name: parameter.name,\n type: parameter.type,\n description: parameter.description,\n required: parameter.required,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('modelIdLabel')}\n </label>\n <input\n type=\"text\"\n value={modelId}\n onChange={(event) => setModelId(event.target.value)}\n placeholder={t('modelIdPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('parametersLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddParameter}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addParameter')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {parameters.map((parameter, index) => (\n <div key={index} className=\"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"mb-2 flex items-center justify-end\">\n <button\n type=\"button\"\n onClick={() => handleRemoveParameter(index)}\n className=\"text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeParameter')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterNameLabel')}</label>\n <input\n type=\"text\"\n value={parameter.name}\n onChange={(event) => handleParameterChange(index, 'name', event.target.value)}\n placeholder={t('parameterNamePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterTypeLabel')}</label>\n <select\n value={parameter.type}\n onChange={(event) => handleParameterChange(index, 'type', event.target.value)}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {PARAMETER_TYPES.map((parameterType) => (\n <option key={parameterType} value={parameterType}>{parameterType}</option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"mt-2\">\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('parameterDescriptionLabel')}</label>\n <input\n type=\"text\"\n value={parameter.description}\n onChange={(event) => handleParameterChange(index, 'description', event.target.value)}\n placeholder={t('parameterDescriptionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div className=\"mt-2\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={parameter.required}\n onChange={(event) => handleParameterChange(index, 'required', event.target.checked)}\n className=\"rounded border-gray-300 text-indigo-600 focus:ring-indigo-400 dark:border-gray-600\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{t('parameterRequiredLabel')}</span>\n </label>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { TrashIcon } from '@heroicons/react/24/outline'\nimport type { VariableAssignerNodeConfig } from '../../contracts'\n\ntype Assignment = {\n target: string\n source: string\n}\n\ntype VariableAssignerNodeConfigFormProps = {\n config: VariableAssignerNodeConfig\n onSave: (config: VariableAssignerNodeConfig) => void\n onCancel: () => void\n}\n\nexport function VariableAssignerNodeConfigForm({ config, onSave, onCancel }: VariableAssignerNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.variableAssignerNodeConfig')\n const [assignments, setAssignments] = useState<Assignment[]>(\n config.assignments.map((assignment) => ({ ...assignment }))\n )\n\n const handleAddAssignment = () => {\n setAssignments([...assignments, { target: '', source: '' }])\n }\n\n const handleRemoveAssignment = (index: number) => {\n setAssignments(assignments.filter((_, assignmentIndex) => assignmentIndex !== index))\n }\n\n const handleAssignmentChange = (index: number, field: keyof Assignment, fieldValue: string) => {\n setAssignments(assignments.map((assignment, assignmentIndex) =>\n assignmentIndex === index ? { ...assignment, [field]: fieldValue } : assignment\n ))\n }\n\n const handleSave = () => {\n onSave({\n ...config,\n assignments: assignments.map((assignment) => ({\n target: assignment.target,\n source: assignment.source,\n })),\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-3 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('assignmentsLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddAssignment}\n className=\"text-sm text-indigo-600 hover:text-indigo-700 dark:text-indigo-400\"\n >\n {t('addAssignment')}\n </button>\n </div>\n\n <div className=\"space-y-3\">\n {assignments.map((assignment, index) => (\n <div key={index} className=\"flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50\">\n <div className=\"grid flex-1 grid-cols-2 gap-2\">\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('targetLabel')}</label>\n <input\n type=\"text\"\n value={assignment.target}\n onChange={(event) => handleAssignmentChange(index, 'target', event.target.value)}\n placeholder={t('targetPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs text-gray-500 dark:text-gray-400\">{t('sourceLabel')}</label>\n <input\n type=\"text\"\n value={assignment.source}\n onChange={(event) => handleAssignmentChange(index, 'source', event.target.value)}\n placeholder={t('sourcePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => handleRemoveAssignment(index)}\n className=\"mt-5 text-sm text-red-500 hover:text-red-600\"\n aria-label={t('removeAssignment')}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { VariableAggregatorNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\nimport { VariableListEditor } from './variable-list-editor'\n\ntype VariableAggregatorNodeConfigFormProps = {\n config: VariableAggregatorNodeConfig\n onSave: (config: VariableAggregatorNodeConfig) => void\n onCancel: () => void\n}\n\nconst AGGREGATION_MODES = ['array', 'object', 'concatenate'] as const\n\nexport function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }: VariableAggregatorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.variableAggregatorNodeConfig')\n const [inputVariables, setInputVariables] = useState<string[]>([...config.inputVariables])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [aggregationMode, setAggregationMode] = useState<VariableAggregatorNodeConfig['aggregationMode']>(config.aggregationMode)\n\n const handleSave = () => {\n onSave({ ...config, inputVariables, outputVariable, aggregationMode })\n }\n\n return (\n <div className=\"space-y-4\">\n <VariableListEditor\n variables={inputVariables}\n onChange={setInputVariables}\n label={t('inputVariablesLabel')}\n placeholder={t('variablePlaceholder')}\n addLabel={t('addInputVariable')}\n color=\"purple\"\n numbered\n editable\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <FormSelect\n label={t('aggregationModeLabel')}\n value={aggregationMode}\n onValueChange={(value) => setAggregationMode(value as VariableAggregatorNodeConfig['aggregationMode'])}\n options={AGGREGATION_MODES.map((mode) => ({\n value: mode,\n label: t(`mode${mode.charAt(0).toUpperCase()}${mode.slice(1)}`),\n }))}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n saveDisabled={!outputVariable.trim() || inputVariables.length === 0 || inputVariables.some((variable) => !variable.trim())}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { DocumentExtractorNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype DocumentExtractorNodeConfigFormProps = {\n config: DocumentExtractorNodeConfig\n onSave: (config: DocumentExtractorNodeConfig) => void\n onCancel: () => void\n}\n\nconst EXTRACTION_MODES = ['text', 'table', 'structured'] as const\n\nexport function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }: DocumentExtractorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.documentExtractorNodeConfig')\n const [extractionMode, setExtractionMode] = useState<DocumentExtractorNodeConfig['extractionMode']>(config.extractionMode)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n\n const handleSave = () => {\n onSave({ ...config, extractionMode, outputVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormSelect\n label={t('extractionModeLabel')}\n value={extractionMode}\n onValueChange={(value) => setExtractionMode(value as DocumentExtractorNodeConfig['extractionMode'])}\n options={EXTRACTION_MODES.map((mode) => ({ value: mode, label: t(`extractionMode_${mode}`) }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('outputVariableLabel')}\n value={outputVariable}\n onValueChange={setOutputVariable}\n placeholder={t('outputVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { ListOperatorNodeConfig } from '../../contracts'\n\ntype ListOperatorNodeConfigFormProps = {\n config: ListOperatorNodeConfig\n onSave: (config: ListOperatorNodeConfig) => void\n onCancel: () => void\n}\n\nconst OPERATION_OPTIONS = ['filter', 'map', 'sort', 'limit', 'deduplicate', 'flatten'] as const\nconst SORT_ORDER_OPTIONS = ['asc', 'desc'] as const\n\nexport function ListOperatorNodeConfigForm({ config, onSave, onCancel }: ListOperatorNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.listOperatorNodeConfig')\n const [operation, setOperation] = useState<ListOperatorNodeConfig['operation']>(config.operation)\n const [inputVariable, setInputVariable] = useState(config.inputVariable)\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [condition, setCondition] = useState(config.condition ?? '')\n const [sortKey, setSortKey] = useState(config.sortKey ?? '')\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>(config.sortOrder ?? 'asc')\n const [limitCount, setLimitCount] = useState(config.limitCount ?? 10)\n\n const showConditionField = operation === 'filter' || operation === 'map'\n const showSortFields = operation === 'sort'\n const showLimitField = operation === 'limit'\n\n const handleSave = () => {\n const updatedConfig: ListOperatorNodeConfig = {\n ...config,\n operation,\n inputVariable,\n outputVariable,\n }\n\n if (showConditionField) {\n updatedConfig.condition = condition\n }\n if (showSortFields) {\n updatedConfig.sortKey = sortKey\n updatedConfig.sortOrder = sortOrder\n }\n if (showLimitField) {\n updatedConfig.limitCount = limitCount\n }\n\n onSave(updatedConfig)\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('operationLabel')}\n </label>\n <select\n value={operation}\n onChange={(event) => setOperation(event.target.value as ListOperatorNodeConfig['operation'])}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {OPERATION_OPTIONS.map((operationOption) => (\n <option key={operationOption} value={operationOption}>{t(`operation_${operationOption}`)}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('inputVariableLabel')}\n </label>\n <input\n type=\"text\"\n value={inputVariable}\n onChange={(event) => setInputVariable(event.target.value)}\n placeholder={t('inputVariablePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('outputVariableLabel')}\n </label>\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder={t('outputVariablePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n {showConditionField && (\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('conditionLabel')}\n </label>\n <input\n type=\"text\"\n value={condition}\n onChange={(event) => setCondition(event.target.value)}\n placeholder={t('conditionPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n )}\n\n {showSortFields && (\n <>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('sortKeyLabel')}\n </label>\n <input\n type=\"text\"\n value={sortKey}\n onChange={(event) => setSortKey(event.target.value)}\n placeholder={t('sortKeyPlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('sortOrderLabel')}\n </label>\n <select\n value={sortOrder}\n onChange={(event) => setSortOrder(event.target.value as 'asc' | 'desc')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n >\n {SORT_ORDER_OPTIONS.map((order) => (\n <option key={order} value={order}>{t(`sortOrder_${order}`)}</option>\n ))}\n </select>\n </div>\n </>\n )}\n\n {showLimitField && (\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('limitCountLabel')}\n </label>\n <input\n type=\"number\"\n value={limitCount}\n onChange={(event) => setLimitCount(Number(event.target.value))}\n min={1}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { IterationStartNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype IterationStartNodeConfigFormProps = {\n config: IterationStartNodeConfig\n onSave: (config: IterationStartNodeConfig) => void\n onCancel: () => void\n}\n\nexport function IterationStartNodeConfigForm({ config, onSave, onCancel }: IterationStartNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.iterationStartNodeConfig')\n const [iteratorVariable, setIteratorVariable] = useState(config.iteratorVariable)\n const [itemVariable, setItemVariable] = useState(config.itemVariable)\n const [indexVariable, setIndexVariable] = useState(config.indexVariable)\n\n const handleSave = () => {\n onSave({ ...config, iteratorVariable, itemVariable, indexVariable })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('iteratorVariableLabel')}\n value={iteratorVariable}\n onValueChange={setIteratorVariable}\n placeholder={t('iteratorVariablePlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('itemVariableLabel')}\n value={itemVariable}\n onValueChange={setItemVariable}\n placeholder={t('itemVariablePlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('indexVariableLabel')}\n value={indexVariable}\n onValueChange={setIndexVariable}\n placeholder={t('indexVariablePlaceholder')}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState, useMemo } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { XMarkIcon, PlusIcon } from '@heroicons/react/24/outline'\nimport type { EntityNodeConfig } from '../../contracts'\nimport type { WorkflowEntityDefinition } from '../../types'\nimport { getEntityBadgeColor, getEntityGradient } from '../../constants/entity-colors'\n\ntype EntityNodeConfigFormProps = {\n config: EntityNodeConfig\n entities?: WorkflowEntityDefinition[]\n onSave: (config: EntityNodeConfig) => void\n onCancel: () => void\n}\n\nconst FIELD_TYPE_BADGE_COLORS: Record<string, string> = {\n string: 'bg-gray-100 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300',\n number: 'bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300',\n boolean: 'bg-green-100 text-green-600 dark:bg-green-500/20 dark:text-green-300',\n date: 'bg-amber-100 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300',\n object: 'bg-purple-100 text-purple-600 dark:bg-purple-500/20 dark:text-purple-300',\n array: 'bg-teal-100 text-teal-600 dark:bg-teal-500/20 dark:text-teal-300',\n}\n\nexport function EntityNodeConfigForm({ config, entities = [], onSave, onCancel }: EntityNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.entityNodeConfig')\n const [selectedFields, setSelectedFields] = useState<string[]>([...config.selectedFields])\n const [outputVariable, setOutputVariable] = useState(config.outputVariable)\n const [limit, setLimit] = useState(config.limit)\n const [filterVariables, setFilterVariables] = useState<Record<string, string>>({ ...config.filterVariables })\n\n const entityDefinition = useMemo(\n () => entities.find((entity) => entity.id === config.entityMasterId),\n [entities, config.entityMasterId]\n )\n const availableFields = useMemo(() => entityDefinition?.fields ?? [], [entityDefinition])\n const allFieldNames = useMemo(() => availableFields.map((field) => field.name), [availableFields])\n\n const allSelected = selectedFields.length === allFieldNames.length\n const gradient = getEntityGradient(config.entityMasterId)\n const badgeColor = getEntityBadgeColor(config.entityMasterId)\n\n const handleToggleSelectAll = () => {\n if (allSelected) {\n setSelectedFields([])\n } else {\n setSelectedFields([...allFieldNames])\n }\n }\n\n const handleToggleField = (fieldName: string) => {\n setSelectedFields((previous) =>\n previous.includes(fieldName)\n ? previous.filter((name) => name !== fieldName)\n : [...previous, fieldName]\n )\n }\n\n const handleAddFilter = () => {\n setFilterVariables((previous) => ({ ...previous, '': '' }))\n }\n\n const handleUpdateFilterVariable = (oldKey: string, newKey: string) => {\n setFilterVariables((previous) => {\n const updated = { ...previous }\n const value = updated[oldKey] ?? ''\n delete updated[oldKey]\n updated[newKey] = value\n return updated\n })\n }\n\n const handleUpdateFilterField = (key: string, newValue: string) => {\n setFilterVariables((previous) => ({ ...previous, [key]: newValue }))\n }\n\n const handleRemoveFilter = (key: string) => {\n setFilterVariables((previous) => {\n const updated = { ...previous }\n delete updated[key]\n return updated\n })\n }\n\n const handleSave = () => {\n // Clean up empty filter entries\n const cleanedFilters: Record<string, string> = {}\n for (const [key, value] of Object.entries(filterVariables)) {\n if (key.trim() && value.trim()) {\n cleanedFilters[key.trim()] = value.trim()\n }\n }\n\n onSave({\n ...config,\n selectedFields,\n outputVariable: outputVariable.trim(),\n limit,\n filterVariables: cleanedFilters,\n })\n }\n\n const filterEntries = Object.entries(filterVariables)\n\n return (\n <div className=\"space-y-5\">\n {/* Entity type badge (read-only) */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('entityTypeLabel')}\n </label>\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-6 w-6 items-center justify-center rounded-md bg-gradient-to-br ${gradient}`}>\n <span className=\"text-[10px] text-white font-bold\">\n {(entityDefinition?.label ?? config.entityMasterId ?? '?').charAt(0).toUpperCase()}\n </span>\n </div>\n <span className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${badgeColor}`}>\n {entityDefinition?.label ?? config.entityMasterId ?? t('entityTypeLabel')}\n </span>\n </div>\n {!entityDefinition && (\n <p className=\"mt-2 text-xs text-amber-600 dark:text-amber-400\">\n {t('entityNotConfigured')}\n </p>\n )}\n </div>\n\n {/* Output variable */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('outputVariableLabel')}\n </label>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('outputVariableHelp')}</p>\n <input\n type=\"text\"\n value={outputVariable}\n onChange={(event) => setOutputVariable(event.target.value)}\n placeholder={`${(entityDefinition?.label ?? 'entity').replace(/\\s+/g, '')}Data`}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n </div>\n\n {/* Record limit */}\n <div>\n <label className=\"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('limitLabel')}\n </label>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('limitHelp')}</p>\n <input\n type=\"number\"\n value={limit}\n onChange={(event) => setLimit(Math.max(1, Number.parseInt(event.target.value, 10) || 1))}\n min={1}\n max={1000}\n className=\"w-32 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n />\n </div>\n\n {/* Fields section */}\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('fieldsLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleToggleSelectAll}\n className=\"text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300\"\n >\n {allSelected ? t('deselectAll') : t('selectAll')}\n </button>\n </div>\n\n {selectedFields.length === 0 && (\n <p className=\"mb-2 text-xs text-amber-600 dark:text-amber-400\">{t('noFieldsSelected')}</p>\n )}\n\n <div className=\"max-h-48 space-y-1 overflow-y-auto rounded-lg border border-gray-200 p-2 dark:border-gray-700\">\n {availableFields.length === 0 && (\n <p className=\"px-2 py-2 text-xs text-gray-500 dark:text-gray-400\">\n {t('noFieldsSelected')}\n </p>\n )}\n {availableFields.map((field) => {\n const isSelected = selectedFields.includes(field.name)\n const typeBadgeColor = FIELD_TYPE_BADGE_COLORS[field.type] ?? FIELD_TYPE_BADGE_COLORS.string\n\n return (\n <label\n key={field.name}\n className={`flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 transition-colors ${\n isSelected\n ? 'bg-indigo-50 dark:bg-indigo-500/10'\n : 'hover:bg-gray-50 dark:hover:bg-gray-800'\n }`}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => handleToggleField(field.name)}\n className=\"h-3.5 w-3.5 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n <span className=\"flex-1 text-xs font-medium text-gray-900 dark:text-white\">\n {field.name}\n </span>\n <span className={`rounded-full px-1.5 py-0.5 text-[9px] font-medium ${typeBadgeColor}`}>\n {field.type}\n </span>\n </label>\n )\n })}\n </div>\n </div>\n\n {/* Filters section */}\n <div>\n <div className=\"mb-1 flex items-center justify-between\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n {t('filtersLabel')}\n </label>\n <button\n type=\"button\"\n onClick={handleAddFilter}\n className=\"flex items-center gap-1 text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n {t('addFilter')}\n </button>\n </div>\n <p className=\"mb-2 text-xs text-gray-500 dark:text-gray-400\">{t('filtersHelp')}</p>\n\n {filterEntries.length > 0 && (\n <div className=\"space-y-2\">\n {filterEntries.map(([variableName, fieldName], index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={variableName}\n onChange={(event) => handleUpdateFilterVariable(variableName, event.target.value)}\n placeholder={t('variableName')}\n className=\"flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500\"\n />\n <span className=\"text-xs text-gray-400\">→</span>\n <select\n value={fieldName}\n onChange={(event) => handleUpdateFilterField(variableName, event.target.value)}\n className=\"flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n >\n <option value=\"\">{t('fieldName')}</option>\n {availableFields.map((field) => (\n <option key={field.name} value={field.name}>\n {field.name}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => handleRemoveFilter(variableName)}\n className=\"rounded-md p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20\"\n >\n <XMarkIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\"\n >\n {t('cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={selectedFields.length === 0}\n className=\"rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-indigo-500 dark:hover:bg-indigo-600\"\n >\n {t('save')}\n </button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormTextarea } from '@ui/index'\nimport type { GroupNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\nconst GROUP_COLOR_OPTIONS: Array<{ value: GroupNodeConfig['color']; ring: string; fill: string }> = [\n { value: 'indigo', ring: 'ring-indigo-500', fill: 'bg-indigo-500' },\n { value: 'teal', ring: 'ring-teal-500', fill: 'bg-teal-500' },\n { value: 'amber', ring: 'ring-amber-500', fill: 'bg-amber-500' },\n { value: 'rose', ring: 'ring-rose-500', fill: 'bg-rose-500' },\n { value: 'slate', ring: 'ring-slate-500', fill: 'bg-slate-500' },\n]\n\ntype GroupNodeConfigFormProps = {\n config: GroupNodeConfig\n onSave: (config: GroupNodeConfig) => void\n onCancel: () => void\n}\n\nexport function GroupNodeConfigForm({ config, onSave, onCancel }: GroupNodeConfigFormProps) {\n const translations = useTranslations('agents.workflow.groupNodeConfig')\n const [formLabel, setFormLabel] = useState(config.label)\n const [description, setDescription] = useState(config.description ?? '')\n const [color, setColor] = useState<GroupNodeConfig['color']>(config.color)\n\n const handleSave = () => {\n const trimmedLabel = formLabel.trim()\n if (!trimmedLabel) return\n onSave({\n ...config,\n label: trimmedLabel,\n description: description.trim() || undefined,\n color,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={translations('labelField')}\n value={formLabel}\n onValueChange={setFormLabel}\n placeholder={translations('labelPlaceholder')}\n />\n\n <FormTextarea\n label={translations('descriptionField')}\n value={description}\n onValueChange={setDescription}\n placeholder={translations('descriptionPlaceholder')}\n rows={3}\n />\n\n <div>\n <label className=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {translations('colorField')}\n </label>\n <div className=\"flex items-center gap-3\">\n {GROUP_COLOR_OPTIONS.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n onClick={() => setColor(option.value)}\n className={`h-8 w-8 rounded-full ${option.fill} transition-all ${\n color === option.value\n ? `ring-2 ${option.ring} ring-offset-2 dark:ring-offset-gray-900`\n : 'opacity-60 hover:opacity-100'\n }`}\n aria-label={option.value}\n />\n ))}\n </div>\n </div>\n\n <ConfigFormActions\n cancelLabel={translations('cancel')}\n saveLabel={translations('save')}\n onCancel={onCancel}\n onSave={handleSave}\n saveDisabled={!formLabel.trim()}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput } from '@ui/index'\nimport type { RuleNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype RuleNodeConfigFormProps = {\n config: RuleNodeConfig\n onSave: (config: RuleNodeConfig) => void\n onCancel: () => void\n /** Optional rule catalog for the org. The parent drawer fetches this\n * from `/rules` and passes it in so authors pick by slug instead of\n * free-typing an id. When omitted, renders a plain text field. */\n availableRules?: { ruleId: string; name?: string }[]\n}\n\nexport function RuleNodeConfigForm({ config, onSave, onCancel, availableRules }: RuleNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.ruleNodeConfig')\n const [ruleId, setRuleId] = useState(config.ruleId ?? '')\n const [priority, setPriority] = useState<number>(config.priority ?? 1)\n const [enabled, setEnabled] = useState<boolean>(config.enabled ?? true)\n\n const handleSave = () => {\n const next: RuleNodeConfig = { ...config, type: 'rule', ruleId: ruleId.trim(), priority, enabled }\n onSave(next)\n }\n\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">{t('ruleIdLabel', { _: 'Rule' } as never)}</label>\n {availableRules && availableRules.length > 0 ? (\n <select\n value={ruleId}\n onChange={(event) => setRuleId(event.target.value)}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white\"\n >\n <option value=\"\">{t('rulePickPrompt', { _: 'Choose a rule…' } as never)}</option>\n {availableRules.map((rule) => (\n <option key={rule.ruleId} value={rule.ruleId}>\n {rule.name ? `${rule.name} (${rule.ruleId})` : rule.ruleId}\n </option>\n ))}\n </select>\n ) : (\n <FormInput\n type=\"text\"\n value={ruleId}\n onValueChange={setRuleId}\n placeholder=\"e.g. peak_hours\"\n />\n )}\n <p className=\"mt-1 text-[11px] text-gray-500 dark:text-gray-400\">\n References an <code>astrlabe.agent_rules.rule_id</code> row in this organization.\n </p>\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <FormInput\n type=\"number\"\n label={t('priorityLabel', { _: 'Priority' } as never)}\n value={String(priority)}\n onValueChange={(value) => setPriority(Number(value) || 0)}\n min={0}\n />\n <label className=\"flex items-end gap-2 pb-2 text-sm text-gray-700 dark:text-gray-300\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(event) => setEnabled(event.target.checked)}\n className=\"h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600\"\n />\n {t('enabledLabel', { _: 'Enabled' } as never)}\n </label>\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect, FormTextarea } from '@ui/index'\nimport type { AgentNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype AgentNodeConfigFormProps = {\n config: AgentNodeConfig\n onSave: (config: AgentNodeConfig) => void\n onCancel: () => void\n /** Agent catalog for the org — lets authors pick by name instead of\n * pasting a UUID. Fetched by the parent drawer from `/agents`. */\n availableAgents?: { id: string; name?: string; slug?: string }[]\n /** Bedrock / OpenAI / Anthropic connections already configured in the\n * org. Fetched from `/agents/connections`. */\n availableConnections?: { id: string; name?: string; providerType?: string }[]\n}\n\nexport function AgentNodeConfigForm({\n config,\n onSave,\n onCancel,\n availableAgents,\n availableConnections,\n}: AgentNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.agentNodeConfig')\n const [agentId, setAgentId] = useState(config.agentId ?? '')\n const [connectionId, setConnectionId] = useState(config.connectionId ?? '')\n const [modelId, setModelId] = useState(config.modelId ?? '')\n const [systemPrompt, setSystemPrompt] = useState(config.systemPrompt ?? '')\n const [userPrompt, setUserPrompt] = useState(config.userPrompt ?? '')\n const [maxTokens, setMaxTokens] = useState<number>(config.maxTokens ?? 1024)\n const [temperature, setTemperature] = useState<number>(config.temperature ?? 0.2)\n\n const handleSave = () => {\n const next: AgentNodeConfig = {\n ...config,\n type: 'agent',\n agentId: agentId.trim() || undefined,\n connectionId: connectionId.trim() || undefined,\n modelId: modelId.trim() || undefined,\n systemPrompt: systemPrompt || undefined,\n userPrompt: userPrompt || undefined,\n maxTokens,\n temperature,\n }\n onSave(next)\n }\n\n const agentOptions = (availableAgents ?? []).map((agent) => ({\n value: agent.id,\n label: agent.name ?? agent.slug ?? agent.id,\n }))\n const connOptions = (availableConnections ?? []).map((conn) => ({\n value: conn.id,\n label: conn.providerType ? `${conn.name ?? conn.id} (${conn.providerType})` : (conn.name ?? conn.id),\n }))\n\n return (\n <div className=\"space-y-4\">\n {agentOptions.length > 0 ? (\n <FormSelect\n label={t('agentLabel', { _: 'Agent' } as never)}\n value={agentId}\n onValueChange={setAgentId}\n options={[{ value: '', label: t('agentPickPrompt', { _: 'Choose an agent…' } as never) }, ...agentOptions]}\n />\n ) : (\n <FormInput\n type=\"text\"\n label={t('agentIdLabel', { _: 'Agent ID' } as never)}\n value={agentId}\n onValueChange={setAgentId}\n placeholder=\"UUID of an astrlabe.agents row\"\n />\n )}\n\n {connOptions.length > 0 ? (\n <FormSelect\n label={t('connectionLabel', { _: 'Model provider connection' } as never)}\n value={connectionId}\n onValueChange={setConnectionId}\n options={[{ value: '', label: t('connectionPickPrompt', { _: 'Inline model (no connection)' } as never) }, ...connOptions]}\n />\n ) : (\n <FormInput\n type=\"text\"\n label={t('connectionIdLabel', { _: 'Connection ID' } as never)}\n value={connectionId}\n onValueChange={setConnectionId}\n placeholder=\"UUID of a model_provider_connections row\"\n />\n )}\n\n <FormInput\n type=\"text\"\n label={t('modelIdLabel', { _: 'Model override (optional)' } as never)}\n value={modelId}\n onValueChange={setModelId}\n placeholder=\"amazon.nova-lite-v1:0\"\n />\n\n <FormTextarea\n label={t('systemPromptLabel', { _: 'System prompt' } as never)}\n value={systemPrompt}\n onValueChange={setSystemPrompt}\n placeholder=\"You are a data analyst. Base every sentence on the provided data — no speculation.\"\n rows={4}\n />\n\n <FormTextarea\n label={t('userPromptLabel', { _: 'User prompt' } as never)}\n value={userPrompt}\n onValueChange={setUserPrompt}\n placeholder={'Station profile:\\n{{ ds-station.station }}\\n\\nProduce a ≤120-word briefing…'}\n rows={8}\n />\n\n <div className=\"grid grid-cols-2 gap-3\">\n <FormInput\n type=\"number\"\n label={t('maxTokensLabel', { _: 'Max output tokens' } as never)}\n value={String(maxTokens)}\n onValueChange={(value) => setMaxTokens(Number(value) || 0)}\n min={1}\n max={8192}\n step={32}\n />\n <FormInput\n type=\"number\"\n label={t('temperatureLabel', { _: 'Temperature' } as never)}\n value={String(temperature)}\n onValueChange={(value) => setTemperature(Number(value) || 0)}\n min={0}\n max={2}\n step={0.1}\n />\n </div>\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect } from '@ui/index'\nimport type { AudioInputNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype AudioInputNodeConfigFormProps = {\n config: AudioInputNodeConfig\n onSave: (config: AudioInputNodeConfig) => void\n onCancel: () => void\n}\n\nconst AUDIO_FORMATS = ['auto', 'mp3', 'wav', 'm4a', 'webm', 'ogg', 'flac', 'mp4', 'mpga'] as const\n\nexport function AudioInputNodeConfigForm({ config, onSave, onCancel }: AudioInputNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.audioInputNodeConfig')\n const [url, setUrl] = useState(config.url ?? '')\n const [format, setFormat] = useState<string>(config.format && config.format.length > 0 ? config.format : 'auto')\n\n const handleSave = () => {\n onSave({\n ...config,\n url,\n format: format === 'auto' ? undefined : format,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('urlLabel')}\n value={url}\n onValueChange={setUrl}\n placeholder={t('urlPlaceholder')}\n />\n\n <FormSelect\n label={t('formatLabel')}\n value={format}\n onValueChange={setFormat}\n options={AUDIO_FORMATS.map((option) => ({ value: option, label: option }))}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { FormInput, FormSelect, FormTextarea } from '@ui/index'\nimport type { SpeechTranscriberNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype SpeechTranscriberNodeConfigFormProps = {\n config: SpeechTranscriberNodeConfig\n onSave: (config: SpeechTranscriberNodeConfig) => void\n onCancel: () => void\n}\n\nconst RESPONSE_FORMATS: NonNullable<SpeechTranscriberNodeConfig['responseFormat']>[] = [\n 'verbose_json',\n 'json',\n 'text',\n]\n\nexport function SpeechTranscriberNodeConfigForm({ config, onSave, onCancel }: SpeechTranscriberNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.speechTranscriberNodeConfig')\n const [audioUrl, setAudioUrl] = useState(config.audioUrl ?? '')\n const [model, setModel] = useState(config.model ?? 'whisper-1')\n const [language, setLanguage] = useState(config.language ?? '')\n const [prompt, setPrompt] = useState(config.prompt ?? '')\n const [responseFormat, setResponseFormat] = useState<NonNullable<SpeechTranscriberNodeConfig['responseFormat']>>(\n config.responseFormat ?? 'verbose_json',\n )\n const [endpoint, setEndpoint] = useState(config.endpoint ?? '')\n const [timeoutMs, setTimeoutMs] = useState(config.timeoutMs ?? 120_000)\n\n const handleSave = () => {\n onSave({\n ...config,\n audioUrl,\n model: model.trim() || undefined,\n language: language.trim() || undefined,\n prompt: prompt.trim() || undefined,\n responseFormat,\n endpoint: endpoint.trim() || undefined,\n timeoutMs,\n })\n }\n\n return (\n <div className=\"space-y-4\">\n <FormInput\n type=\"text\"\n label={t('audioUrlLabel')}\n value={audioUrl}\n onValueChange={setAudioUrl}\n placeholder={t('audioUrlPlaceholder')}\n />\n\n <FormInput\n type=\"text\"\n label={t('modelLabel')}\n value={model}\n onValueChange={setModel}\n placeholder=\"whisper-1\"\n />\n\n <FormInput\n type=\"text\"\n label={t('languageLabel')}\n value={language}\n onValueChange={setLanguage}\n placeholder={t('languagePlaceholder')}\n />\n\n <FormTextarea\n label={t('promptLabel')}\n value={prompt}\n onValueChange={setPrompt}\n placeholder={t('promptPlaceholder')}\n rows={3}\n />\n\n <FormSelect\n label={t('responseFormatLabel')}\n value={responseFormat}\n onValueChange={(value) => setResponseFormat(value as typeof responseFormat)}\n options={RESPONSE_FORMATS.map((value) => ({ value, label: value }))}\n />\n\n <FormInput\n type=\"text\"\n label={t('endpointLabel')}\n value={endpoint}\n onValueChange={setEndpoint}\n placeholder={t('endpointPlaceholder')}\n />\n\n <FormInput\n type=\"number\"\n label={t('timeoutLabel')}\n value={String(timeoutMs)}\n onValueChange={(value) => setTimeoutMs(Number(value))}\n min={1000}\n max={600_000}\n step={1000}\n />\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { DashboardOutputNodeConfig } from '../../contracts'\nimport { ConfigFormActions } from './config-form-actions'\n\ntype DashboardOutputNodeConfigFormProps = {\n config: DashboardOutputNodeConfig\n onSave: (config: DashboardOutputNodeConfig) => void\n onCancel: () => void\n}\n\ntype SourceMode = 'reference' | 'inline'\n\nexport function DashboardOutputNodeConfigForm({ config, onSave, onCancel }: DashboardOutputNodeConfigFormProps) {\n const t = useTranslations('agents.workflow.dashboardOutputNodeConfig')\n const initialMode: SourceMode = config.dashboard ? 'inline' : 'reference'\n const [mode, setMode] = useState<SourceMode>(initialMode)\n const [dashboardFrom, setDashboardFrom] = useState<string>(config.dashboardFrom ?? '')\n const [inlineJson, setInlineJson] = useState<string>(\n config.dashboard ? JSON.stringify(config.dashboard, null, 2) : ''\n )\n const [parseError, setParseError] = useState<string | null>(null)\n\n const handleSave = () => {\n if (mode === 'reference') {\n const trimmed = dashboardFrom.trim()\n onSave({ type: 'dashboard_output', dashboardFrom: trimmed })\n return\n }\n try {\n const parsed = inlineJson.trim() ? (JSON.parse(inlineJson) as Record<string, unknown>) : {}\n setParseError(null)\n onSave({ type: 'dashboard_output', dashboard: parsed })\n } catch (error) {\n setParseError(error instanceof Error ? error.message : String(error))\n }\n }\n\n return (\n <div className=\"space-y-4\">\n <p className=\"text-xs text-gray-500 dark:text-gray-400\">{t('description')}</p>\n\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setMode('reference')}\n className={`flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${\n mode === 'reference'\n ? 'border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300'\n : 'border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300'\n }`}\n >\n {t('modeReference')}\n </button>\n <button\n type=\"button\"\n onClick={() => setMode('inline')}\n className={`flex-1 rounded-lg border px-3 py-2 text-xs font-medium transition-colors ${\n mode === 'inline'\n ? 'border-fuchsia-500 bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-300'\n : 'border-gray-200 bg-white text-gray-600 hover:border-fuchsia-300 dark:border-white/10 dark:bg-white/5 dark:text-gray-300'\n }`}\n >\n {t('modeInline')}\n </button>\n </div>\n\n {mode === 'reference' ? (\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {t('referenceLabel')}\n </label>\n <input\n type=\"text\"\n value={dashboardFrom}\n onChange={(event) => setDashboardFrom(event.target.value)}\n placeholder={t('referencePlaceholder')}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white\"\n />\n <p className=\"mt-1 text-[10px] text-gray-500 dark:text-gray-400\">{t('referenceHelp')}</p>\n </div>\n ) : (\n <div>\n <label className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {t('inlineLabel')}\n </label>\n <textarea\n value={inlineJson}\n onChange={(event) => setInlineJson(event.target.value)}\n placeholder='{\\n \"kpis\": [],\\n \"charts\": [],\\n \"tables\": []\\n}'\n rows={12}\n className=\"w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-xs font-mono text-gray-900 placeholder:text-gray-400 focus:border-fuchsia-500 focus:outline-none focus:ring-1 focus:ring-fuchsia-500 dark:border-white/10 dark:bg-white/5 dark:text-white\"\n />\n {parseError ? (\n <p className=\"mt-1 text-[10px] font-medium text-red-600 dark:text-red-400\">\n {t('parseError')}: {parseError}\n </p>\n ) : (\n <p className=\"mt-1 text-[10px] text-gray-500 dark:text-gray-400\">{t('inlineHelp')}</p>\n )}\n </div>\n )}\n\n <ConfigFormActions\n cancelLabel={t('cancel')}\n saveLabel={t('save')}\n onCancel={onCancel}\n onSave={handleSave}\n />\n </div>\n )\n}\n","import { useTranslations } from '@ui/lib/i18n-context'\nimport { BeakerIcon } from '@heroicons/react/24/outline'\nimport { LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS, isExperimentalNodeType } from '../../constants/workflow-constants'\nimport { getEntityGradient, getEntityIcon } from '../../constants/entity-colors'\nimport { GlassModal } from '@ui/components/glass-modal'\nimport { useModalStore } from '../../store/modal-store'\nimport { StartNodeConfigForm } from '../config-forms/start-node-config-form'\nimport { EndNodeConfigForm } from '../config-forms/end-node-config-form'\nimport { IfElseNodeConfigForm } from '../config-forms/if-else-node-config-form'\nimport { CodeNodeConfigForm } from '../config-forms/code-node-config-form'\nimport { HttpRequestNodeConfigForm } from '../config-forms/http-request-node-config-form'\nimport { S3WriteNodeConfigForm } from '../config-forms/s3-write-node-config-form'\nimport { TemplateTransformNodeConfigForm } from '../config-forms/template-transform-node-config-form'\nimport { IterationNodeConfigForm } from '../config-forms/iteration-node-config-form'\nimport { KnowledgeBaseNodeConfigForm } from '../config-forms/knowledge-base-node-config-form'\nimport { AnswerNodeConfigForm } from '../config-forms/answer-node-config-form'\nimport { QuestionClassifierNodeConfigForm } from '../config-forms/question-classifier-node-config-form'\nimport { ParameterExtractorNodeConfigForm } from '../config-forms/parameter-extractor-node-config-form'\nimport { VariableAssignerNodeConfigForm } from '../config-forms/variable-assigner-node-config-form'\nimport { VariableAggregatorNodeConfigForm } from '../config-forms/variable-aggregator-node-config-form'\nimport { DocumentExtractorNodeConfigForm } from '../config-forms/document-extractor-node-config-form'\nimport { ListOperatorNodeConfigForm } from '../config-forms/list-operator-node-config-form'\nimport { IterationStartNodeConfigForm } from '../config-forms/iteration-start-node-config-form'\nimport { EntityNodeConfigForm } from '../config-forms/entity-node-config-form'\n// DatasourceNodeConfigForm has its own GlassModal — rendered directly in WorkflowCanvas\nimport { GroupNodeConfigForm } from '../config-forms/group-node-config-form'\nimport { RuleNodeConfigForm } from '../config-forms/rule-node-config-form'\nimport { AgentNodeConfigForm } from '../config-forms/agent-node-config-form'\nimport { AudioInputNodeConfigForm } from '../config-forms/audio-input-node-config-form'\nimport { SpeechTranscriberNodeConfigForm } from '../config-forms/speech-transcriber-node-config-form'\nimport { DashboardOutputNodeConfigForm } from '../config-forms/dashboard-output-node-config-form'\nimport type {\n LogicNodeConfig,\n StartNodeConfig,\n EndNodeConfig,\n IfElseNodeConfig,\n CodeNodeConfig,\n HttpRequestNodeConfig,\n S3WriteNodeConfig,\n TemplateTransformNodeConfig,\n IterationNodeConfig,\n KnowledgeBaseNodeConfig,\n AnswerNodeConfig,\n QuestionClassifierNodeConfig,\n ParameterExtractorNodeConfig,\n VariableAssignerNodeConfig,\n VariableAggregatorNodeConfig,\n DocumentExtractorNodeConfig,\n ListOperatorNodeConfig,\n IterationStartNodeConfig,\n EntityNodeConfig,\n DatasourceNodeConfig,\n GroupNodeConfig,\n ModelProviderNodeConfig,\n RuleNodeConfig,\n AgentNodeConfig,\n AudioInputNodeConfig,\n SpeechTranscriberNodeConfig,\n DashboardOutputNodeConfig,\n} from '../../contracts'\nimport type { WorkflowEntityDefinition } from '../../types'\n\nconst NODE_TITLE_KEYS: Record<string, string> = {\n start: 'startNodeConfig',\n end: 'endNodeConfig',\n if_else: 'ifElseNodeConfig',\n code: 'codeNodeConfig',\n http_request: 'httpRequestNodeConfig',\n s3_write: 's3WriteNodeConfig',\n template_transform: 'templateTransformNodeConfig',\n iteration: 'iterationNodeConfig',\n knowledge_base: 'knowledgeBaseNodeConfig',\n answer: 'answerNodeConfig',\n question_classifier: 'questionClassifierNodeConfig',\n parameter_extractor: 'parameterExtractorNodeConfig',\n variable_assigner: 'variableAssignerNodeConfig',\n variable_aggregator: 'variableAggregatorNodeConfig',\n document_extractor: 'documentExtractorNodeConfig',\n list_operator: 'listOperatorNodeConfig',\n iteration_start: 'iterationStartNodeConfig',\n entity: 'entityNodeConfig',\n datasource: 'datasourceNodeConfig',\n group: 'groupNodeConfig',\n rule: 'ruleNodeConfig',\n agent: 'agentNodeConfig',\n audio_input: 'audioInputNodeConfig',\n speech_transcriber: 'speechTranscriberNodeConfig',\n dashboard_output: 'dashboardOutputNodeConfig',\n}\n\ntype DatasourceDefinition = {\n id: string\n name: string\n dialect: string\n}\n\ntype LogicNodeModalProps = {\n onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void\n entities?: WorkflowEntityDefinition[]\n datasources?: DatasourceDefinition[]\n onLoadTables?: (datasourceId: string) => Promise<string[]>\n onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{ name: string; type: string; nullable?: boolean }>>\n}\n\nexport function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables, onLoadSchema }: LogicNodeModalProps) {\n const t = useTranslations('agents.workflow')\n\n const activeModal = useModalStore((s) => s.activeModal)\n const logicNodeData = useModalStore((s) => s.logicNodeData)\n const closeModal = useModalStore((s) => s.closeModal)\n\n const open = activeModal === 'logic-node'\n const nodeId = logicNodeData?.nodeId ?? null\n const nodeLabel = logicNodeData?.nodeLabel ?? ''\n const config = logicNodeData?.config ?? null\n\n if (!config || !nodeId) return null\n\n const entityMasterId = config.type === 'entity' ? (config as EntityNodeConfig).entityMasterId : undefined\n const IconComponent = entityMasterId ? getEntityIcon(entityMasterId) : LOGIC_ICON_MAP[config.type]\n const gradient = entityMasterId ? getEntityGradient(entityMasterId) : (LOGIC_NODE_GRADIENTS[config.type] ?? 'from-gray-400 to-gray-500')\n const titleKey = NODE_TITLE_KEYS[config.type]\n const title = titleKey ? t(`${titleKey}.title`) : nodeLabel\n\n const handleSave = (updatedConfig: LogicNodeConfig) => {\n onSave(nodeId, updatedConfig)\n }\n\n const renderForm = () => {\n switch (config.type) {\n case 'start':\n return <StartNodeConfigForm config={config as StartNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'end':\n return <EndNodeConfigForm config={config as EndNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'if_else':\n return <IfElseNodeConfigForm config={config as IfElseNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'code':\n return <CodeNodeConfigForm config={config as CodeNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'http_request':\n return <HttpRequestNodeConfigForm config={config as HttpRequestNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 's3_write':\n return <S3WriteNodeConfigForm config={config as S3WriteNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'template_transform':\n return <TemplateTransformNodeConfigForm config={config as TemplateTransformNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'iteration':\n return <IterationNodeConfigForm config={config as IterationNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'knowledge_base':\n return <KnowledgeBaseNodeConfigForm config={config as KnowledgeBaseNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'answer':\n return <AnswerNodeConfigForm config={config as AnswerNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'question_classifier':\n return <QuestionClassifierNodeConfigForm config={config as QuestionClassifierNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'parameter_extractor':\n return <ParameterExtractorNodeConfigForm config={config as ParameterExtractorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'variable_assigner':\n return <VariableAssignerNodeConfigForm config={config as VariableAssignerNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'variable_aggregator':\n return <VariableAggregatorNodeConfigForm config={config as VariableAggregatorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'document_extractor':\n return <DocumentExtractorNodeConfigForm config={config as DocumentExtractorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'list_operator':\n return <ListOperatorNodeConfigForm config={config as ListOperatorNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'iteration_start':\n return <IterationStartNodeConfigForm config={config as IterationStartNodeConfig} onSave={handleSave} onCancel={closeModal} />\n // datasource — handled by standalone DatasourceNodeConfigForm in WorkflowCanvas\n case 'entity':\n return <EntityNodeConfigForm config={config as EntityNodeConfig} entities={entities} onSave={handleSave} onCancel={closeModal} />\n case 'group':\n return <GroupNodeConfigForm config={config as GroupNodeConfig} onSave={handleSave} onCancel={closeModal} />\n // model_provider was removed from the canvas — providers are\n // now account-level credentials configured in Settings, not\n // draggable nodes. Any legacy graph that still has a\n // model_provider node falls through to default → no edit form.\n case 'rule':\n return <RuleNodeConfigForm config={config as RuleNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'agent':\n return <AgentNodeConfigForm config={config as AgentNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'audio_input':\n return <AudioInputNodeConfigForm config={config as AudioInputNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'speech_transcriber':\n return <SpeechTranscriberNodeConfigForm config={config as SpeechTranscriberNodeConfig} onSave={handleSave} onCancel={closeModal} />\n case 'dashboard_output':\n return <DashboardOutputNodeConfigForm config={config as DashboardOutputNodeConfig} onSave={handleSave} onCancel={closeModal} />\n default:\n return null\n }\n }\n\n const isExperimental = isExperimentalNodeType(config.type)\n\n return (\n <GlassModal\n open={open}\n onClose={closeModal}\n title={title}\n subtitle={nodeLabel}\n label={t('nodeConfig')}\n icon={IconComponent ? <IconComponent className=\"h-5 w-5 text-white\" /> : undefined}\n gradient={gradient}\n maxWidth=\"2xl\"\n >\n {isExperimental && (\n <div className=\"mb-4 flex items-start gap-2 rounded-lg border border-amber-300/40 bg-amber-50/70 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-100\">\n <BeakerIcon className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-600 dark:text-amber-300\" aria-hidden=\"true\" />\n <div className=\"space-y-1\">\n <div className=\"font-semibold\">\n {t('experimentalNode', { _: 'Experimental node' } as never)}\n </div>\n <div className=\"text-amber-800/90 dark:text-amber-100/80\">\n {t('experimentalNodeWarning', {\n _: 'This node\\'s executor is a stub today. The configuration is saved, but the node may pass through inputs unchanged at run-time until the executor lands.',\n } as never)}\n </div>\n </div>\n </div>\n )}\n {renderForm()}\n </GlassModal>\n )\n}\n","/**\n * Node Context Menu\n * =================\n * Floating right-click menu for a single workflow node.\n * Provides edit, duplicate, copy, and delete actions.\n * Positioned absolutely at mouse coordinates and closes\n * on outside click or Escape key.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n PencilIcon,\n DocumentDuplicateIcon,\n ClipboardDocumentIcon,\n TrashIcon,\n} from '@heroicons/react/24/outline'\n\ntype NodeContextMenuProps = {\n position: { x: number; y: number }\n targetId: string\n onClose: () => void\n onEdit: (nodeId: string) => void\n onDuplicate: (nodeId: string) => void\n onCopy: (nodeId: string) => void\n onDelete: (nodeId: string) => void\n}\n\nexport function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onCopy, onDelete }: NodeContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n\n const entries: ContextMenuEntry[] = [\n {\n key: 'edit',\n label: translations('edit'),\n icon: PencilIcon,\n onClick: () => { onEdit(targetId); onClose() },\n testId: 'context-menu-edit',\n },\n {\n key: 'duplicate',\n label: translations('duplicate'),\n icon: DocumentDuplicateIcon,\n onClick: () => { onDuplicate(targetId); onClose() },\n testId: 'context-menu-duplicate',\n },\n {\n key: 'copy',\n label: translations('copy'),\n icon: ClipboardDocumentIcon,\n onClick: () => { onCopy(targetId); onClose() },\n testId: 'context-menu-copy',\n },\n {\n key: 'delete',\n label: translations('delete'),\n icon: TrashIcon,\n onClick: () => { onDelete(targetId); onClose() },\n danger: true,\n testId: 'context-menu-delete',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[180px]\"\n testId=\"node-context-menu\"\n />\n )\n}\n","/**\n * Panel Context Menu\n * ==================\n * Floating right-click menu for the empty canvas area.\n * Provides paste, select all, fit view, and add note actions.\n * Positioned at mouse coordinates, uses flow-space position\n * for placing new nodes.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n ClipboardIcon,\n CursorArrowRaysIcon,\n ArrowsPointingOutIcon,\n PencilSquareIcon,\n} from '@heroicons/react/24/outline'\n\ntype PanelContextMenuProps = {\n position: { x: number; y: number }\n onClose: () => void\n onPaste: () => void\n onSelectAll: () => void\n onFitView: () => void\n onAddNote: (flowPosition: { x: number; y: number }) => void\n flowPosition: { x: number; y: number }\n hasClipboardContent: boolean\n}\n\nexport function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView, onAddNote, flowPosition, hasClipboardContent }: PanelContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n\n const entries: ContextMenuEntry[] = [\n {\n key: 'paste',\n label: translations('paste'),\n icon: ClipboardIcon,\n onClick: () => { onPaste(); onClose() },\n disabled: !hasClipboardContent,\n testId: 'context-menu-paste',\n },\n {\n key: 'select-all',\n label: translations('selectAll'),\n icon: CursorArrowRaysIcon,\n onClick: () => { onSelectAll(); onClose() },\n testId: 'context-menu-select-all',\n },\n {\n key: 'fit-view',\n label: translations('fitView'),\n icon: ArrowsPointingOutIcon,\n onClick: () => { onFitView(); onClose() },\n testId: 'context-menu-fit-view',\n },\n { type: 'divider', key: 'divider-main' },\n {\n key: 'add-note',\n label: translations('addNote'),\n icon: PencilSquareIcon,\n onClick: () => { onAddNote(flowPosition); onClose() },\n testId: 'context-menu-add-note',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[180px]\"\n testId=\"panel-context-menu\"\n />\n )\n}\n","/**\n * Selection Context Menu\n * ======================\n * Floating right-click menu for multiple selected nodes.\n * Provides copy, duplicate, delete, alignment, and distribution actions.\n *\n * All state-modifying actions are provided by the canvas via callbacks\n * to ensure React Flow state (useNodesState) stays in sync.\n */\n\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { ContextMenu, type ContextMenuEntry } from '@ui/index'\nimport {\n ClipboardDocumentIcon,\n DocumentDuplicateIcon,\n TrashIcon,\n RectangleGroupIcon,\n} from '@heroicons/react/24/outline'\nimport type { Node } from '@xyflow/react'\n\ntype AlignDirection = 'left' | 'right' | 'top' | 'bottom' | 'centerHorizontal' | 'centerVertical'\ntype DistributeDirection = 'horizontal' | 'vertical'\n\ntype SelectionContextMenuProps = {\n position: { x: number; y: number }\n onClose: () => void\n onCopy: () => void\n onDuplicate: () => void\n onDelete: () => void\n onGroupSelected: () => void\n onAlign: (direction: AlignDirection) => void\n onDistribute: (direction: DistributeDirection) => void\n}\n\nexport type { AlignDirection, DistributeDirection }\n\nexport function SelectionContextMenu({\n position,\n onClose,\n onCopy,\n onDuplicate,\n onDelete,\n onGroupSelected,\n onAlign,\n onDistribute,\n}: SelectionContextMenuProps) {\n const translations = useTranslations('agents.workflow.contextMenu')\n const entries: ContextMenuEntry[] = [\n {\n key: 'copy',\n label: translations('copy'),\n icon: ClipboardDocumentIcon,\n onClick: () => { onCopy(); onClose() },\n testId: 'context-menu-copy',\n },\n {\n key: 'duplicate',\n label: translations('duplicate'),\n icon: DocumentDuplicateIcon,\n onClick: () => { onDuplicate(); onClose() },\n testId: 'context-menu-duplicate',\n },\n {\n key: 'group-selected',\n label: translations('groupSelected'),\n icon: RectangleGroupIcon,\n onClick: () => { onGroupSelected(); onClose() },\n testId: 'context-menu-group-selected',\n },\n {\n key: 'delete',\n label: translations('delete'),\n icon: TrashIcon,\n onClick: () => { onDelete(); onClose() },\n danger: true,\n testId: 'context-menu-delete',\n },\n { type: 'divider', key: 'divider-main' },\n {\n key: 'align-left',\n label: translations('alignLeft'),\n icon: AlignLeftIcon,\n onClick: () => { onAlign('left'); onClose() },\n testId: 'context-menu-align-left',\n },\n {\n key: 'align-right',\n label: translations('alignRight'),\n icon: AlignRightIcon,\n onClick: () => { onAlign('right'); onClose() },\n testId: 'context-menu-align-right',\n },\n {\n key: 'align-top',\n label: translations('alignTop'),\n icon: AlignTopIcon,\n onClick: () => { onAlign('top'); onClose() },\n testId: 'context-menu-align-top',\n },\n {\n key: 'align-bottom',\n label: translations('alignBottom'),\n icon: AlignBottomIcon,\n onClick: () => { onAlign('bottom'); onClose() },\n testId: 'context-menu-align-bottom',\n },\n {\n key: 'center-horizontally',\n label: translations('centerHorizontally'),\n icon: CenterHorizontalIcon,\n onClick: () => { onAlign('centerHorizontal'); onClose() },\n testId: 'context-menu-center-horizontally',\n },\n {\n key: 'center-vertically',\n label: translations('centerVertically'),\n icon: CenterVerticalIcon,\n onClick: () => { onAlign('centerVertical'); onClose() },\n testId: 'context-menu-center-vertically',\n },\n { type: 'divider', key: 'divider-distribute' },\n {\n key: 'distribute-horizontally',\n label: translations('distributeHorizontally'),\n icon: DistributeHorizontalIcon,\n onClick: () => { onDistribute('horizontal'); onClose() },\n testId: 'context-menu-distribute-horizontally',\n },\n {\n key: 'distribute-vertically',\n label: translations('distributeVertically'),\n icon: DistributeVerticalIcon,\n onClick: () => { onDistribute('vertical'); onClose() },\n testId: 'context-menu-distribute-vertically',\n },\n ]\n\n return (\n <ContextMenu\n position={position}\n onClose={onClose}\n entries={entries}\n minWidthClass=\"min-w-[220px]\"\n testId=\"selection-context-menu\"\n />\n )\n}\n\n// ============================================================================\n// Helper: get node dimensions\n// ============================================================================\n\nconst DEFAULT_NODE_WIDTH = 200\nconst DEFAULT_NODE_HEIGHT = 60\n\nexport function getNodeDimensions(node: Node): { width: number; height: number } {\n return {\n width: (node.measured?.width ?? node.width ?? DEFAULT_NODE_WIDTH) as number,\n height: (node.measured?.height ?? node.height ?? DEFAULT_NODE_HEIGHT) as number,\n }\n}\n\n// ============================================================================\n// Lightweight SVG alignment icons (no external dependency needed)\n// ============================================================================\n\nfunction AlignLeftIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"4\" x2=\"4\" y2=\"20\" />\n <rect x=\"7\" y=\"6\" width=\"10\" height=\"4\" rx=\"1\" />\n <rect x=\"7\" y=\"14\" width=\"6\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"20\" />\n <rect x=\"7\" y=\"6\" width=\"10\" height=\"4\" rx=\"1\" />\n <rect x=\"11\" y=\"14\" width=\"6\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignTopIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"4\" x2=\"20\" y2=\"4\" />\n <rect x=\"6\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n <rect x=\"14\" y=\"7\" width=\"4\" height=\"6\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction AlignBottomIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"20\" />\n <rect x=\"6\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n <rect x=\"14\" y=\"11\" width=\"4\" height=\"6\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction CenterHorizontalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\" strokeDasharray=\"2 2\" />\n <rect x=\"5\" y=\"6\" width=\"14\" height=\"4\" rx=\"1\" />\n <rect x=\"7\" y=\"14\" width=\"10\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction CenterVerticalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" strokeDasharray=\"2 2\" />\n <rect x=\"6\" y=\"5\" width=\"4\" height=\"14\" rx=\"1\" />\n <rect x=\"14\" y=\"7\" width=\"4\" height=\"10\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction DistributeHorizontalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"3\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n <rect x=\"10\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n <rect x=\"17\" y=\"8\" width=\"4\" height=\"8\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction DistributeVerticalIcon({ className }: { className?: string }) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <rect x=\"8\" y=\"3\" width=\"8\" height=\"4\" rx=\"1\" />\n <rect x=\"8\" y=\"10\" width=\"8\" height=\"4\" rx=\"1\" />\n <rect x=\"8\" y=\"17\" width=\"8\" height=\"4\" rx=\"1\" />\n </svg>\n )\n}\n","/**\n * WorkflowCanvas (Main Interactive Canvas)\n * =========================================\n * Dify-inspired drawable workflow canvas.\n * Users drop nodes from the sidebar palette, connect them with edges,\n * and the graph is saved as JSON (WorkflowGraph) to PostgreSQL.\n *\n * Key features:\n * - Drag & drop from NodePalette sidebar\n * - Draw edges between nodes with connection validation\n * - Auto-save draft (debounced 2s)\n * - Load/restore from saved WorkflowGraph\n * - MiniMap with node type coloring\n * - Snap to grid (20px)\n * - Conditional edge labels (True/False for If/Else branches)\n * - Undo/Redo via Zustand store\n * - Copy/Paste nodes via Zustand store\n * - Custom animated connection line while dragging\n * - Render props for external modals (AgentModal, LogicNodeModal)\n */\n\nimport { lazy, useState, useCallback, useEffect, useRef, useMemo } from 'react'\nimport {\n useNodesState,\n useEdgesState,\n useReactFlow,\n ReactFlowProvider,\n addEdge,\n BackgroundVariant,\n MarkerType,\n Position,\n type Node,\n type Edge,\n type Connection,\n type NodeTypes,\n} from '@xyflow/react'\nimport '@xyflow/react/dist/style.css'\nimport { useTranslations } from '@ui/lib/i18n-context'\n\nimport { useWorkflowStore } from '../../store/workflow-store'\nimport { useModalStore } from '../../store/modal-store'\nimport { ConditionalEdge } from './conditional-edge'\nimport { CustomConnectionLine } from './custom-connection-line'\nimport { DraggableCommandBar } from './draggable-command-bar'\nimport { GRAPH_ACTIVE_EDGE_COLOR, GRAPH_TRUE_EDGE_COLOR, GRAPH_FALSE_EDGE_COLOR, MINIMAP_NODE_COLORS } from '../../constants/workflow-constants'\nimport { getEntityMinimapColor } from '../../constants/entity-colors'\nimport { createDefaultLogicNodeConfig } from '../../utils/logic-node-defaults'\nimport { DatasourceNodeConfigForm } from '../config-forms/datasource-node-config-form'\nimport { applyDagreLayout, type LayoutDirection } from '../../utils/layout-engine'\nimport type {\n AgentWithPrompts,\n WorkflowCardDisplayMode,\n AgentNodeData,\n ToolCanvasData,\n RuleNodeData,\n EntityNodeData,\n DatasourceNodeData,\n GroupNodeData,\n VariableAggregatorNodeData,\n WorkflowEntityDefinition,\n} from '../../types'\nimport type {\n AgentModel,\n AgentTool,\n WorkflowTool,\n AgentRule,\n WorkflowGraph,\n WorkflowNodeType,\n WorkflowNodeData,\n LogicNodeConfig,\n EntityNodeConfig,\n DatasourceNodeConfig,\n RuleNodeConfig,\n GroupNodeConfig,\n} from '../../contracts'\n\n// Node components\nimport { AgentFlowNode } from '../nodes/agent-flow-node'\nimport { AgentToolFlowNode } from '../nodes/agent-tool-flow-node'\nimport { ToolFlowNode } from '../nodes/tool-flow-node'\nimport { RuleFlowNode } from '../nodes/rule-flow-node'\nimport { EntityFlowNode } from '../nodes/entity-flow-node'\nimport { StartFlowNode } from '../nodes/start-flow-node'\nimport { EndFlowNode } from '../nodes/end-flow-node'\nimport { IfElseFlowNode } from '../nodes/if-else-flow-node'\nimport { CodeFlowNode } from '../nodes/code-flow-node'\nimport { HttpRequestFlowNode } from '../nodes/http-request-flow-node'\nimport { TemplateTransformFlowNode } from '../nodes/template-transform-flow-node'\nimport { IterationFlowNode } from '../nodes/iteration-flow-node'\nimport { KnowledgeBaseFlowNode } from '../nodes/knowledge-base-flow-node'\nimport { AnswerFlowNode } from '../nodes/answer-flow-node'\nimport { QuestionClassifierFlowNode } from '../nodes/question-classifier-flow-node'\nimport { ParameterExtractorFlowNode } from '../nodes/parameter-extractor-flow-node'\nimport { VariableAssignerFlowNode } from '../nodes/variable-assigner-flow-node'\nimport { VariableAggregatorFlowNode } from '../nodes/variable-aggregator-flow-node'\nimport { DocumentExtractorFlowNode } from '../nodes/document-extractor-flow-node'\nimport { ListOperatorFlowNode } from '../nodes/list-operator-flow-node'\nimport { IterationStartFlowNode } from '../nodes/iteration-start-flow-node'\nimport { NoteFlowNode } from '../nodes/note-flow-node'\nimport { DatasourceFlowNode } from '../nodes/datasource-flow-node'\nimport { GroupFlowNode } from '../nodes/group-flow-node'\nimport { AudioInputFlowNode } from '../nodes/audio-input-flow-node'\nimport { SpeechTranscriberFlowNode } from '../nodes/speech-transcriber-flow-node'\nimport { DashboardOutputFlowNode } from '../nodes/dashboard-output-flow-node'\nimport { LogicNodeModal } from '../modals/logic-node-modal'\nimport { NodeContextMenu } from '../context-menus/node-context-menu'\nimport { PanelContextMenu } from '../context-menus/panel-context-menu'\nimport { SelectionContextMenu, getNodeDimensions } from '../context-menus/selection-context-menu'\nimport type { AlignDirection, DistributeDirection } from '../context-menus/selection-context-menu'\n\n// ============================================================================\n// Lazy imports for React Flow sub-components (code-split)\n// ============================================================================\n\nconst ReactFlow = lazy(() => import('@xyflow/react').then((module) => ({ default: module.ReactFlow })))\nconst Background = lazy(() => import('@xyflow/react').then((module) => ({ default: module.Background })))\nconst MiniMap = lazy(() => import('@xyflow/react').then((module) => ({ default: module.MiniMap })))\n\n// ============================================================================\n// Built-in node type registry (all 20 node types)\n// ============================================================================\n\nconst BUILT_IN_NODE_TYPES: NodeTypes = {\n agent: AgentFlowNode,\n agent_tool: AgentToolFlowNode,\n tool: ToolFlowNode,\n rule: RuleFlowNode,\n entity: EntityFlowNode,\n start: StartFlowNode,\n end: EndFlowNode,\n if_else: IfElseFlowNode,\n code: CodeFlowNode,\n http_request: HttpRequestFlowNode,\n template_transform: TemplateTransformFlowNode,\n iteration: IterationFlowNode,\n knowledge_base: KnowledgeBaseFlowNode,\n answer: AnswerFlowNode,\n question_classifier: QuestionClassifierFlowNode,\n parameter_extractor: ParameterExtractorFlowNode,\n variable_assigner: VariableAssignerFlowNode,\n variable_aggregator: VariableAggregatorFlowNode,\n document_extractor: DocumentExtractorFlowNode,\n list_operator: ListOperatorFlowNode,\n iteration_start: IterationStartFlowNode,\n note: NoteFlowNode,\n datasource: DatasourceFlowNode,\n // model_provider removed from canvas — providers are now\n // account-level credentials (configured in Settings), not draggable\n // nodes. Agents reference the provider via the `Models` tab in the\n // agent modal. See agent-modal.tsx + n8n/Dify patterns.\n group: GroupFlowNode,\n audio_input: AudioInputFlowNode,\n speech_transcriber: SpeechTranscriberFlowNode,\n dashboard_output: DashboardOutputFlowNode,\n}\n\n// ============================================================================\n// All 20 node types recognized by the canvas\n// ============================================================================\n\nconst ALL_LOGIC_NODE_TYPES: WorkflowNodeType[] = [\n 'start', 'end', 'if_else', 'code', 'http_request',\n 'template_transform', 'iteration', 'knowledge_base',\n 'answer', 'question_classifier', 'parameter_extractor',\n 'variable_assigner', 'variable_aggregator',\n 'document_extractor', 'list_operator',\n 'iteration_start', 'note',\n 'agent', 'tool', 'rule', 'entity', 'datasource', 'group',\n 'audio_input', 'speech_transcriber',\n 'dashboard_output',\n]\n\nfunction isLogicNodeType(nodeType: string): nodeType is WorkflowNodeType {\n return ALL_LOGIC_NODE_TYPES.includes(nodeType as WorkflowNodeType)\n}\n\n// ============================================================================\n// Edge config constants\n// ============================================================================\n\nconst DEFAULT_EDGE_OPTIONS = {\n type: 'smoothstep' as const,\n animated: true,\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n}\n\nconst SNAP_GRID: [number, number] = [20, 20]\n\nconst MINIMAP_DEFAULT_COLOR = '#94a3b8'\n\nfunction getMinimapNodeColor(node: Node): string {\n if (node.type === 'entity') {\n const entityMasterId = (node.data as EntityNodeData | undefined)?.config?.entityMasterId\n return getEntityMinimapColor(entityMasterId)\n }\n return MINIMAP_NODE_COLORS[node.type ?? 'agent'] ?? MINIMAP_DEFAULT_COLOR\n}\n\nconst AUTO_SAVE_DEBOUNCE_MS = 2000\n\n// ============================================================================\n// Render-prop types for external modals\n// ============================================================================\n\ntype AgentModalRenderProps = {\n agent: AgentWithPrompts | null\n models: AgentModel[]\n open: boolean\n isCreateMode: boolean\n onClose: () => void\n onSaved: () => void\n}\n\ntype LogicNodeModalRenderProps = {\n nodeId: string | null\n nodeLabel: string\n config: LogicNodeConfig | null\n open: boolean\n onClose: () => void\n onSave: (nodeId: string, updatedConfig: LogicNodeConfig) => void\n entities: WorkflowEntityDefinition[]\n}\n\n// ============================================================================\n// Props\n// ============================================================================\n\ntype WorkflowCanvasProps = {\n agents: AgentWithPrompts[]\n models: AgentModel[]\n /** Configured LLM provider connections (account-level credentials).\n * Forwarded to AgentModal so the agent's \"Model\" tab can list the\n * providers/credentials available to bind to. Optional — empty\n * means no provider has been configured yet (modal shows empty\n * state pointing the user to Settings). */\n modelProviders?: import('../panels/node-palette').ModelProvider[]\n tools?: WorkflowTool[]\n agentTools?: AgentTool[]\n rules?: AgentRule[]\n entities?: WorkflowEntityDefinition[]\n datasources?: Array<{ id: string; name: string; dialect: string }>\n onLoadTables?: (datasourceId: string) => Promise<string[]>\n onLoadSchema?: (datasourceId: string, table: string) => Promise<Array<{ name: string; type: string; nullable?: boolean }>>\n initialGraph?: WorkflowGraph | null\n onGraphChange?: (graph: WorkflowGraph) => void\n onEditTool?: (tool: WorkflowTool) => void\n onToggleTool?: (tool: WorkflowTool) => void\n onEditRule?: (rule: AgentRule) => void\n onToggleRule?: (rule: AgentRule) => void\n onCancelCreateAgent?: () => void\n onAgentSaved?: () => void\n isCreatingAgent?: boolean\n /** Custom node type components — merged with built-in edge types */\n nodeTypes?: NodeTypes\n /** Optional: render the AgentModal externally (frontend provides the component) */\n renderAgentModal?: (props: AgentModalRenderProps) => React.ReactNode\n /** Optional: render a custom LogicNodeModal; defaults to internal modal */\n renderLogicNodeModal?: (props: LogicNodeModalRenderProps) => React.ReactNode\n}\n\n// ============================================================================\n// Inner component (requires ReactFlowProvider ancestor)\n// ============================================================================\n\nfunction WorkflowCanvasInner({\n agents,\n models,\n modelProviders = [],\n tools,\n agentTools = [],\n rules,\n entities = [],\n datasources = [],\n onLoadTables,\n onLoadSchema,\n initialGraph,\n onGraphChange,\n onEditTool,\n onToggleTool,\n onEditRule,\n onToggleRule,\n onCancelCreateAgent,\n onAgentSaved,\n isCreatingAgent = false,\n nodeTypes: externalNodeTypes,\n renderAgentModal,\n renderLogicNodeModal: _renderLogicNodeModal,\n}: WorkflowCanvasProps) {\n const { screenToFlowPosition, getNode, toObject, fitView, zoomIn, zoomOut, zoomTo } = useReactFlow()\n const tWorkflow = useTranslations('agents.workflow')\n const sortedAgents = useMemo(() => [...agents].sort((agentA, agentB) => (agentA.order ?? 0) - (agentB.order ?? 0)), [agents])\n const [selectedAgentId, setSelectedAgentId] = useState<string | null>(null)\n const openAgentModalAction = useModalStore((s) => s.openAgentModal)\n const openLogicNodeModalAction = useModalStore((s) => s.openLogicNodeModal)\n const closeModalAction = useModalStore((s) => s.closeModal)\n const activeModal = useModalStore((s) => s.activeModal)\n const modalOpen = activeModal === 'agent'\n\n // Open agent modal when parent sets isCreatingAgent\n useEffect(() => {\n if (isCreatingAgent) {\n openAgentModalAction(\n { agentId: '', name: '', order: 0, enabled: true, temperature: 0.7, maxTokens: 4096 } as AgentWithPrompts,\n models,\n true,\n agentTools,\n modelProviders,\n )\n }\n }, [isCreatingAgent])\n const graphChangeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Ref-based edge insert handler (avoids circular deps with useCallback)\n const insertNodeOnEdgeRef = useRef<(edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => void>(() => {})\n\n // Ref-based group expand toggle (avoids circular deps — handler needs setNodes/setEdges which are declared later)\n const toggleGroupExpandRef = useRef<(nodeId: string) => void>(() => {})\n\n const handleToggleGroupExpand = useCallback(\n (nodeId: string) => { toggleGroupExpandRef.current(nodeId) },\n []\n )\n\n // Stable callback that reads from the ref — safe to pass into edge data\n const insertNodeOnEdge = useCallback(\n (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => {\n insertNodeOnEdgeRef.current(edgeId, nodeType, position)\n },\n []\n )\n\n const allTools = tools ?? []\n const allRules = rules ?? []\n const allEntities = entities\n\n // Zustand store actions (raw)\n const storeUndoRaw = useWorkflowStore((state) => state.undo)\n const storeRedoRaw = useWorkflowStore((state) => state.redo)\n const storeCopy = useWorkflowStore((state) => state.copy)\n const storePasteRaw = useWorkflowStore((state) => state.paste)\n const storeTakeSnapshot = useWorkflowStore((state) => state.takeSnapshot)\n const canUndo = useWorkflowStore((state) => state.past.length > 0)\n const canRedo = useWorkflowStore((state) => state.future.length > 0)\n\n // Canvas control mode (pointer vs hand)\n const controlMode = useWorkflowStore((state) => state.controlMode)\n const setControlMode = useWorkflowStore((state) => state.setControlMode)\n\n // UI toggles (zustand store)\n const showMinimap = useWorkflowStore((s) => s.showMinimap)\n const showDots = useWorkflowStore((s) => s.showDots)\n const showShortcuts = useWorkflowStore((s) => s.showShortcuts)\n const cardDisplayMode = useWorkflowStore((s) => s.cardDisplayMode)\n const layoutDirection = useWorkflowStore((s) => s.layoutDirection)\n const toggleMinimap = useWorkflowStore((s) => s.toggleMinimap)\n const toggleDots = useWorkflowStore((s) => s.toggleDots)\n const toggleShortcuts = useWorkflowStore((s) => s.toggleShortcuts)\n const closeShortcuts = useWorkflowStore((s) => s.closeShortcuts)\n const toggleCardDisplayMode = useWorkflowStore((s) => s.toggleCardDisplayMode)\n const setLayoutDirection = useWorkflowStore((s) => s.setLayoutDirection)\n\n // Logic node editing state\n const [editingLogicNodeId, setEditingLogicNodeId] = useState<string | null>(null)\n\n const handleEditLogicNode = useCallback((nodeId: string) => {\n setEditingLogicNodeId(nodeId)\n const node = getNode(nodeId)\n if (!node) return\n const nodeData = node.data as Record<string, unknown>\n const config = nodeData.config as LogicNodeConfig | undefined\n if (!config) return\n // Datasource nodes use their own GlassModal — skip the generic LogicNodeModal store\n if (config.type === 'datasource') return\n openLogicNodeModalAction(nodeId, (nodeData.label as string) ?? '', config)\n }, [getNode, openLogicNodeModalAction])\n\n // Build lookup maps for entity data enrichment on drop\n const agentMap = useMemo(() => {\n const map = new Map<string, AgentWithPrompts>()\n for (const agent of agents) {\n map.set(agent.agentId, agent)\n }\n return map\n }, [agents])\n\n const toolMap = useMemo(() => {\n const map = new Map<string, WorkflowTool>()\n for (const tool of allTools) {\n map.set(tool.toolId, tool)\n }\n return map\n }, [allTools])\n\n const agentToolMap = useMemo(() => {\n const map = new Map<string, AgentTool>()\n for (const at of agentTools) {\n map.set(at.agentToolId, at)\n }\n return map\n }, [agentTools])\n\n const ruleMap = useMemo(() => {\n const map = new Map<string, AgentRule>()\n for (const rule of allRules) {\n map.set(rule.ruleId, rule)\n }\n return map\n }, [allRules])\n\n const entityMap = useMemo(() => {\n const map = new Map<string, WorkflowEntityDefinition>()\n for (const entity of allEntities) {\n map.set(entity.id, entity)\n }\n return map\n }, [allEntities])\n\n const selectedAgent = useMemo(\n () => sortedAgents.find((agent) => (agent.id || agent.agentId) === selectedAgentId) ?? null,\n [sortedAgents, selectedAgentId]\n )\n\n // Merge built-in + external node types (external overrides built-in)\n const mergedNodeTypes = useMemo<NodeTypes>(\n () => (externalNodeTypes ? { ...BUILT_IN_NODE_TYPES, ...externalNodeTypes } : BUILT_IN_NODE_TYPES),\n [externalNodeTypes]\n )\n\n // Merge edge types\n const edgeTypes = useMemo(() => ({\n default: ConditionalEdge,\n }), [])\n\n // ==========================================================================\n // Build initial nodes from saved graph or from DB entities\n // ==========================================================================\n\n const handleRemoveNodeFromCanvas = useCallback(\n (nodeId: string) => {\n setNodes((currentNodes) => {\n // When removing a group, un-parent its children (make them top-level)\n const removedNode = currentNodes.find((node) => node.id === nodeId)\n const isGroup = removedNode?.type === 'group'\n return currentNodes\n .filter((node) => node.id !== nodeId)\n .map((node) => {\n if (isGroup && node.parentId === nodeId) {\n // Convert child to top-level: make position absolute\n const parentPosition = removedNode?.position ?? { x: 0, y: 0 }\n return {\n ...node,\n parentId: undefined,\n extent: undefined,\n position: {\n x: node.position.x + parentPosition.x,\n y: node.position.y + parentPosition.y,\n },\n }\n }\n return node\n })\n })\n setEdges((currentEdges) =>\n currentEdges.filter((edge) => edge.source !== nodeId && edge.target !== nodeId)\n )\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n const buildInitialNodes = useCallback((): Node[] => {\n if (initialGraph && initialGraph.nodes.length > 0) {\n const mappedNodes: Node[] = initialGraph.nodes.map((savedNode) => {\n if (savedNode.type === 'agent') {\n const agent = agentMap.get(savedNode.data.entityId)\n if (agent) {\n return {\n id: savedNode.id,\n type: 'agent' as const,\n position: savedNode.position,\n data: {\n agent,\n order: agent.order ?? 0,\n selected: selectedAgentId === savedNode.id,\n agentTools: agentTools.map((at) => ({ id: at.agentToolId, name: at.name, category: at.category, enabled: at.enabled })),\n providerName: models.find((m) => m.id === agent.modelId)?.provider,\n onSelect: () => {\n setSelectedAgentId(agent.agentId)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n },\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies AgentNodeData,\n }\n }\n // Agent not found — render placeholder (don't fall through to logic)\n return {\n id: savedNode.id,\n type: 'agent' as const,\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as AgentNodeData,\n }\n }\n if (savedNode.type === 'tool') {\n const tool = toolMap.get(savedNode.data.entityId)\n if (tool) {\n return {\n id: savedNode.id,\n type: 'tool' as const,\n position: savedNode.position,\n data: {\n tool,\n order: typeof tool.displayOrder === 'number' ? tool.displayOrder : 0,\n onEdit: onEditTool,\n onToggle: onToggleTool,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies ToolCanvasData,\n }\n }\n // Tool not found — render placeholder (don't fall through to logic)\n return {\n id: savedNode.id,\n type: 'tool' as const,\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as ToolCanvasData,\n }\n }\n if (savedNode.type === 'rule') {\n const rule = ruleMap.get(savedNode.data.entityId)\n if (rule) {\n return {\n id: savedNode.id,\n type: 'rule' as const,\n position: savedNode.position,\n data: {\n rule,\n order: typeof rule.priority === 'number' ? rule.priority : 0,\n onEdit: onEditRule,\n onToggle: onToggleRule,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n }\n // Rule engine node — no specific rule entity, use config-based rendering\n const ruleConfig = savedNode.data.config as RuleNodeConfig | undefined\n return {\n id: savedNode.id,\n type: 'rule' as const,\n position: savedNode.position,\n data: {\n rule: undefined,\n config: ruleConfig ?? { type: 'rule' as const },\n label: savedNode.data.label,\n order: 0,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n }\n if (savedNode.type === 'entity') {\n const entityConfig = savedNode.data.config as EntityNodeConfig | undefined\n const entity = entityConfig ? entityMap.get(entityConfig.entityMasterId) : undefined\n return {\n id: savedNode.id,\n type: 'entity' as const,\n position: savedNode.position,\n data: {\n config: entityConfig,\n entity,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies EntityNodeData,\n }\n }\n if (savedNode.type === 'datasource') {\n const datasourceConfig = savedNode.data.config as DatasourceNodeConfig | undefined\n const datasourceEntity = datasourceConfig ? entityMap.get(datasourceConfig.datasourceId) : undefined\n const extendedNodeData = savedNode.data as WorkflowNodeData & { readOnly?: boolean }\n return {\n id: savedNode.id,\n type: 'datasource' as const,\n position: savedNode.position,\n data: {\n config: datasourceConfig,\n datasource: datasourceEntity\n ? {\n id: datasourceEntity.id,\n name: datasourceEntity.label,\n dialect: datasourceConfig?.dialect ?? 'unknown',\n }\n : undefined,\n label: savedNode.data.label,\n readOnly: extendedNodeData.readOnly === true,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies DatasourceNodeData,\n }\n }\n if (savedNode.type === 'group') {\n const groupConfig = savedNode.data.config as GroupNodeConfig | undefined\n const defaultGroupConfig: GroupNodeConfig = {\n type: 'group', label: savedNode.data.label || 'Group', color: 'slate',\n isExpanded: true, width: 400, height: 300, collapsedWidth: 260, collapsedHeight: 60,\n }\n const resolvedConfig = groupConfig ?? defaultGroupConfig\n return {\n id: savedNode.id,\n type: 'group' as const,\n position: savedNode.position,\n ...(savedNode.style ? { style: savedNode.style } : { style: { width: resolvedConfig.width, height: resolvedConfig.height } }),\n data: {\n config: resolvedConfig,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies GroupNodeData,\n }\n }\n // Logic nodes — restore from saved config\n if (isLogicNodeType(savedNode.type)) {\n const config = savedNode.data.config ?? createDefaultLogicNodeConfig(savedNode.type as WorkflowNodeType)\n if (config) {\n const baseNode: Node = {\n id: savedNode.id,\n type: savedNode.type,\n position: savedNode.position,\n data: {\n config,\n label: savedNode.data.label,\n onEdit: handleEditLogicNode,\n },\n }\n // Restore parent-child relationships for nodes inside groups\n if (savedNode.parentId) {\n baseNode.parentId = savedNode.parentId\n baseNode.extent = savedNode.extent\n }\n return baseNode\n }\n }\n\n // Fallback: entity was deleted — return a placeholder\n return {\n id: savedNode.id,\n type: savedNode.type as 'agent' | 'tool' | 'rule',\n position: savedNode.position,\n data: { label: savedNode.data.label } as unknown as AgentNodeData,\n }\n })\n\n // Restore parentId/extent for non-logic nodes (agent, tool, entity, etc.)\n const parentIdMap = new Map<string, { parentId: string; extent?: 'parent' }>()\n for (const savedNode of initialGraph.nodes) {\n if (savedNode.parentId) {\n parentIdMap.set(savedNode.id, { parentId: savedNode.parentId, extent: savedNode.extent })\n }\n }\n const nodesWithParents = mappedNodes.map((node) => {\n const parentInfo = parentIdMap.get(node.id)\n if (parentInfo && !node.parentId) {\n return { ...node, parentId: parentInfo.parentId, extent: parentInfo.extent }\n }\n return node\n })\n\n // Sort: parent (group) nodes must come before their children for React Flow\n return nodesWithParents.sort((nodeA, nodeB) => {\n if (nodeA.type === 'group' && nodeB.parentId === nodeA.id) return -1\n if (nodeB.type === 'group' && nodeA.parentId === nodeB.id) return 1\n return 0\n })\n }\n\n // No saved graph — start empty canvas\n return []\n }, [initialGraph, agentMap, toolMap, ruleMap, entityMap, selectedAgentId, onEditTool, onToggleTool, onEditRule, onToggleRule, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas])\n\n /**\n * Resolve an edge label from the saved graph data (used during initial load\n * when React Flow nodes are not yet mounted — so we read from initialGraph\n * nodes directly instead of using getNode).\n */\n const resolveEdgeLabelFromGraph = useCallback(\n (sourceHandle: string | undefined, sourceNodeId: string): string | undefined => {\n if (!sourceHandle) return undefined\n if (sourceHandle === 'true-out') return 'True'\n if (sourceHandle === 'false-out') return 'False'\n if (sourceHandle === 'loop-out') return 'Loop'\n\n const categoryMatch = sourceHandle.match(/^category-(\\d+)$/)\n if (categoryMatch && initialGraph) {\n const categoryIndex = Number.parseInt(categoryMatch[1], 10)\n const sourceNode = initialGraph.nodes.find((node) => node.id === sourceNodeId)\n if (sourceNode) {\n const config = sourceNode.data.config as { categories?: Array<{ name: string }> } | undefined\n if (config?.categories?.[categoryIndex]) {\n return config.categories[categoryIndex].name\n }\n }\n return `Category ${categoryIndex + 1}`\n }\n\n return undefined\n },\n [initialGraph]\n )\n\n const buildInitialEdges = useCallback((): Edge[] => {\n if (initialGraph && initialGraph.edges.length > 0) {\n // Variable-aggregator fan-in backfill: older graphs (and the pre-fix\n // seed) don't set `targetHandle`, so all incoming edges land on the\n // first port visually. Rewrite missing target handles to `input-0`,\n // `input-1`, ... preserving the edge order in the saved graph.\n const aggregatorIds = new Set(\n initialGraph.nodes.filter((node) => node.type === 'variable_aggregator').map((node) => node.id),\n )\n const aggregatorPortCursor = new Map<string, number>()\n\n return initialGraph.edges.map((savedEdge) => {\n const handle = savedEdge.sourceHandle\n const edgeColor = handle === 'true-out' ? GRAPH_TRUE_EDGE_COLOR\n : handle === 'false-out' ? GRAPH_FALSE_EDGE_COLOR\n : GRAPH_ACTIVE_EDGE_COLOR\n\n let targetHandle = savedEdge.targetHandle\n if (!targetHandle && aggregatorIds.has(savedEdge.target)) {\n const nextIndex = aggregatorPortCursor.get(savedEdge.target) ?? 0\n targetHandle = `input-${nextIndex}`\n aggregatorPortCursor.set(savedEdge.target, nextIndex + 1)\n }\n\n return {\n id: savedEdge.id,\n source: savedEdge.source,\n target: savedEdge.target,\n sourceHandle: savedEdge.sourceHandle,\n targetHandle,\n type: 'default',\n animated: true,\n data: {\n label: resolveEdgeLabelFromGraph(savedEdge.sourceHandle ?? undefined, savedEdge.source),\n onInsertNode: insertNodeOnEdge,\n },\n style: {\n stroke: edgeColor,\n strokeWidth: 2,\n },\n markerEnd: { type: MarkerType.ArrowClosed, color: edgeColor },\n }\n })\n }\n return []\n }, [initialGraph, resolveEdgeLabelFromGraph, insertNodeOnEdge])\n\n const [nodes, setNodes, onNodesChange] = useNodesState(buildInitialNodes())\n const [edges, setEdges, onEdgesChange] = useEdgesState(buildInitialEdges())\n\n // Wire up the group expand ref now that setNodes/setEdges are available\n toggleGroupExpandRef.current = (nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes: Node[]) => {\n const groupNode = currentNodes.find((node) => node.id === nodeId)\n if (!groupNode) return currentNodes\n const groupData = groupNode.data as GroupNodeData\n const groupConfig = groupData.config\n const isCurrentlyExpanded = groupConfig.isExpanded\n const childIds = new Set(currentNodes.filter((node) => node.parentId === nodeId).map((node) => node.id))\n\n return currentNodes.map((node) => {\n if (node.id === nodeId) {\n const updatedConfig: GroupNodeConfig = {\n ...groupConfig,\n isExpanded: !isCurrentlyExpanded,\n }\n return {\n ...node,\n style: !isCurrentlyExpanded\n ? { width: groupConfig.width, height: groupConfig.height }\n : { width: groupConfig.collapsedWidth, height: groupConfig.collapsedHeight },\n data: { ...groupData, config: updatedConfig },\n }\n }\n if (childIds.has(node.id)) {\n return { ...node, hidden: isCurrentlyExpanded }\n }\n return node\n })\n })\n setEdges((currentEdges) => {\n const currentNodeList = useWorkflowStore.getState().nodes\n const storeGroupNode = currentNodeList.find((node) => node.id === nodeId)\n if (!storeGroupNode) return currentEdges\n const storeGroupData = storeGroupNode.data as GroupNodeData\n const isCurrentlyExpanded = storeGroupData.config.isExpanded\n const childIds = new Set(currentNodeList.filter((node) => node.parentId === nodeId).map((node) => node.id))\n\n return currentEdges.map((edge) => {\n if (childIds.has(edge.source) || childIds.has(edge.target)) {\n return { ...edge, hidden: isCurrentlyExpanded }\n }\n return edge\n })\n })\n }\n\n // Reload when initialGraph changes (e.g., after load from server)\n const initialGraphRef = useRef(initialGraph)\n useEffect(() => {\n if (initialGraph !== initialGraphRef.current) {\n initialGraphRef.current = initialGraph\n setNodes(buildInitialNodes())\n setEdges(buildInitialEdges())\n }\n }, [initialGraph, buildInitialNodes, buildInitialEdges, setNodes, setEdges])\n\n // ==========================================================================\n // Keyboard Shortcuts\n // ==========================================================================\n\n const handleSelectAll = useCallback(() => {\n setNodes((currentNodes) => currentNodes.map((node) => ({ ...node, selected: true })))\n }, [setNodes])\n\n const handleDeselectAll = useCallback(() => {\n setNodes((currentNodes) => currentNodes.map((node) => ({ ...node, selected: false })))\n }, [setNodes])\n\n const handleFitView = useCallback(() => {\n fitView({ padding: 0.2 })\n }, [fitView])\n\n const handleLayoutDirectionChange = useCallback(\n (direction: LayoutDirection) => {\n setLayoutDirection(direction)\n if (direction === 'free') {\n // Remove sourcePosition/targetPosition overrides\n setNodes((currentNodes) => currentNodes.map((node) => {\n const { sourcePosition: _s, targetPosition: _t, ...rest } = node\n return rest\n }))\n return\n }\n\n storeTakeSnapshot()\n\n const isTB = direction === 'TB'\n const repositionedNodes = applyDagreLayout(nodes, edges, direction).map((node) => ({\n ...node,\n sourcePosition: isTB ? Position.Bottom : Position.Right,\n targetPosition: isTB ? Position.Top : Position.Left,\n }))\n setNodes(repositionedNodes)\n\n requestAnimationFrame(() => {\n fitView({ padding: 0.2 })\n })\n },\n [nodes, edges, setNodes, setLayoutDirection, fitView, storeTakeSnapshot],\n )\n\n // Sync nodes/edges to Zustand for undo/redo/copy/paste\n const storeSetNodes = useWorkflowStore((state) => state.setNodes)\n const storeSetEdges = useWorkflowStore((state) => state.setEdges)\n\n useEffect(() => {\n storeSetNodes(nodes)\n }, [nodes, storeSetNodes])\n\n useEffect(() => {\n storeSetEdges(edges)\n }, [edges, storeSetEdges])\n\n useEffect(() => {\n const hasMismatch = nodes.some((node) => {\n const nodeData = node.data as Record<string, unknown> | undefined\n return nodeData?.displayMode !== cardDisplayMode\n })\n if (!hasMismatch) return\n\n setNodes((currentNodes) =>\n currentNodes.map((node) => ({\n ...node,\n data: {\n ...(node.data as Record<string, unknown>),\n displayMode: cardDisplayMode,\n },\n }))\n )\n }, [nodes, cardDisplayMode, setNodes])\n\n // Undo/Redo/Paste wrappers — sync Zustand state back to React Flow\n // The raw store actions update Zustand but React Flow uses its own state\n // (useNodesState/useEdgesState), so we must push the restored values back.\n\n const storeUndo = useCallback(() => {\n storeUndoRaw()\n const { nodes: restoredNodes, edges: restoredEdges } = useWorkflowStore.getState()\n setNodes(restoredNodes)\n setEdges(restoredEdges)\n }, [storeUndoRaw, setNodes, setEdges])\n\n const storeRedo = useCallback(() => {\n storeRedoRaw()\n const { nodes: restoredNodes, edges: restoredEdges } = useWorkflowStore.getState()\n setNodes(restoredNodes)\n setEdges(restoredEdges)\n }, [storeRedoRaw, setNodes, setEdges])\n\n const storePaste = useCallback(() => {\n storePasteRaw()\n const { nodes: pastedNodes, edges: pastedEdges } = useWorkflowStore.getState()\n setNodes(pastedNodes)\n setEdges(pastedEdges)\n }, [storePasteRaw, setNodes, setEdges])\n\n // Duplicate = copy + paste in one action\n const handleDuplicateSelected = useCallback(() => {\n storeCopy()\n storePasteRaw()\n const { nodes: duplicatedNodes, edges: duplicatedEdges } = useWorkflowStore.getState()\n setNodes(duplicatedNodes)\n setEdges(duplicatedEdges)\n }, [storeCopy, storePasteRaw, setNodes, setEdges])\n\n // Snapshot on node drag start (so dragging positions can be undone)\n const onNodeDragStart = useCallback(() => {\n storeTakeSnapshot()\n }, [storeTakeSnapshot])\n\n // ==========================================================================\n // Context Menu Action Callbacks\n // These operate on React Flow state (setNodes/setEdges) directly,\n // ensuring the canvas re-renders. Zustand sync happens via useEffect.\n // ==========================================================================\n\n const contextMenuEditNode = useCallback((nodeId: string) => {\n const targetNode = nodes.find((node) => node.id === nodeId)\n if (!targetNode) return\n\n if (targetNode.type === 'agent') {\n const agent = (targetNode.data as AgentNodeData)?.agent\n if (agent) {\n setSelectedAgentId(agent.agentId ?? agent.id ?? null)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n }\n } else if (targetNode.type === 'tool') {\n const tool = (targetNode.data as ToolCanvasData)?.tool\n if (tool) onEditTool?.(tool)\n } else if (targetNode.type === 'rule' && (targetNode.data as RuleNodeData)?.rule) {\n onEditRule?.((targetNode.data as RuleNodeData).rule!)\n } else {\n handleEditLogicNode(nodeId)\n }\n }, [nodes, setSelectedAgentId, openAgentModalAction, models, onEditTool, onEditRule, handleEditLogicNode])\n\n const DUPLICATE_OFFSET = 40\n\n const contextMenuDuplicateNode = useCallback((nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes) => {\n const targetNode = currentNodes.find((node) => node.id === nodeId)\n if (!targetNode) return currentNodes\n const duplicatedNode = {\n ...targetNode,\n id: crypto.randomUUID(),\n position: {\n x: targetNode.position.x + DUPLICATE_OFFSET,\n y: targetNode.position.y + DUPLICATE_OFFSET,\n },\n selected: true,\n data: { ...targetNode.data },\n }\n return [\n ...currentNodes.map((node) => ({ ...node, selected: false })),\n duplicatedNode,\n ]\n })\n }, [storeTakeSnapshot, setNodes])\n\n const contextMenuCopyNode = useCallback((nodeId: string) => {\n setNodes((currentNodes) =>\n currentNodes.map((node) => ({\n ...node,\n selected: node.id === nodeId,\n })),\n )\n requestAnimationFrame(() => {\n storeCopy()\n })\n }, [setNodes, storeCopy])\n\n const contextMenuDeleteNode = useCallback((nodeId: string) => {\n storeTakeSnapshot()\n setNodes((currentNodes) => currentNodes.filter((node) => node.id !== nodeId))\n setEdges((currentEdges) =>\n currentEdges.filter(\n (edge) => edge.source !== nodeId && edge.target !== nodeId,\n ),\n )\n }, [storeTakeSnapshot, setNodes, setEdges])\n\n const contextMenuPaste = useCallback(() => {\n storePaste()\n }, [storePaste])\n\n const contextMenuAddNote = useCallback((flowPosition: { x: number; y: number }) => {\n storeTakeSnapshot()\n const noteConfig = createDefaultLogicNodeConfig('note')\n const noteNode = {\n id: crypto.randomUUID(),\n type: 'note' as const,\n position: flowPosition,\n selected: true,\n data: {\n entityId: '',\n label: 'Note',\n config: noteConfig,\n },\n }\n setNodes((currentNodes) => [\n ...currentNodes.map((node) => ({ ...node, selected: false })),\n noteNode,\n ])\n }, [storeTakeSnapshot, setNodes])\n\n const contextMenuCopySelection = useCallback(() => {\n storeCopy()\n }, [storeCopy])\n\n const contextMenuDuplicateSelection = useCallback(() => {\n handleDuplicateSelected()\n }, [handleDuplicateSelected])\n\n const contextMenuDeleteSelection = useCallback(() => {\n storeTakeSnapshot()\n setNodes((currentNodes) => {\n const selectedIds = new Set(currentNodes.filter((node) => node.selected).map((node) => node.id))\n return currentNodes.filter((node) => !selectedIds.has(node.id))\n })\n setEdges((currentEdges) => {\n const currentNodeList = nodes\n const selectedIds = new Set(currentNodeList.filter((node) => node.selected).map((node) => node.id))\n return currentEdges.filter(\n (edge) => !selectedIds.has(edge.source) && !selectedIds.has(edge.target),\n )\n })\n }, [storeTakeSnapshot, setNodes, setEdges, nodes])\n\n const contextMenuGroupSelected = useCallback(() => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 2) return\n storeTakeSnapshot()\n\n const GROUP_PADDING = 40\n const GROUP_HEADER_HEIGHT = 36\n\n let minX = Infinity\n let minY = Infinity\n let maxX = -Infinity\n let maxY = -Infinity\n\n for (const node of selectedNodes) {\n const dimensions = getNodeDimensions(node)\n minX = Math.min(minX, node.position.x)\n minY = Math.min(minY, node.position.y)\n maxX = Math.max(maxX, node.position.x + dimensions.width)\n maxY = Math.max(maxY, node.position.y + dimensions.height)\n }\n\n const groupWidth = maxX - minX + GROUP_PADDING * 2\n const groupHeight = maxY - minY + GROUP_PADDING * 2 + GROUP_HEADER_HEIGHT\n const groupId = crypto.randomUUID()\n const groupPosition = { x: minX - GROUP_PADDING, y: minY - GROUP_PADDING - GROUP_HEADER_HEIGHT }\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n\n const groupNode: Node = {\n id: groupId,\n type: 'group',\n position: groupPosition,\n style: { width: groupWidth, height: groupHeight },\n data: {\n config: {\n type: 'group',\n label: 'Group',\n color: 'slate',\n isExpanded: true,\n width: groupWidth,\n height: groupHeight,\n collapsedWidth: 260,\n collapsedHeight: 60,\n },\n label: 'Group',\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n },\n }\n\n setNodes((currentNodes) => {\n const updatedNodes = currentNodes.map((node) => {\n if (selectedNodeIds.has(node.id)) {\n return {\n ...node,\n parentId: groupId,\n extent: 'parent' as const,\n position: {\n x: node.position.x - groupPosition.x,\n y: node.position.y - groupPosition.y,\n },\n selected: false,\n }\n }\n return { ...node, selected: false }\n })\n return [groupNode, ...updatedNodes]\n })\n }, [nodes, storeTakeSnapshot, setNodes, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas])\n\n const contextMenuUngroupSelected = useCallback(() => {\n const selectedGroupNodes = nodes.filter((node) => node.selected && node.type === 'group')\n if (selectedGroupNodes.length === 0) return\n storeTakeSnapshot()\n\n const groupIds = new Set(selectedGroupNodes.map((node) => node.id))\n\n setNodes((currentNodes) => {\n const updatedNodes = currentNodes\n .filter((node) => !groupIds.has(node.id))\n .map((node) => {\n if (node.parentId && groupIds.has(node.parentId)) {\n const parentGroup = currentNodes.find((groupNode) => groupNode.id === node.parentId)\n const parentPosition = parentGroup?.position ?? { x: 0, y: 0 }\n return {\n ...node,\n parentId: undefined,\n extent: undefined,\n position: {\n x: node.position.x + parentPosition.x,\n y: node.position.y + parentPosition.y,\n },\n }\n }\n return node\n })\n return updatedNodes\n })\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const contextMenuAlignNodes = useCallback((direction: AlignDirection) => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 2) return\n storeTakeSnapshot()\n const selectedNodeIds = new Set(selectedNodes.map((node) => node.id))\n\n setNodes((currentNodes) => {\n switch (direction) {\n case 'left': {\n const minX = Math.min(...selectedNodes.map((node) => node.position.x))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: minX } } : node,\n )\n }\n case 'right': {\n const maxRight = Math.max(...selectedNodes.map((node) => node.position.x + getNodeDimensions(node).width))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: maxRight - getNodeDimensions(node).width } } : node,\n )\n }\n case 'top': {\n const minY = Math.min(...selectedNodes.map((node) => node.position.y))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: minY } } : node,\n )\n }\n case 'bottom': {\n const maxBottom = Math.max(...selectedNodes.map((node) => node.position.y + getNodeDimensions(node).height))\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: maxBottom - getNodeDimensions(node).height } } : node,\n )\n }\n case 'centerHorizontal': {\n const positions = selectedNodes.map((node) => node.position.x + getNodeDimensions(node).width / 2)\n const centerX = (Math.min(...positions) + Math.max(...positions)) / 2\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, x: centerX - getNodeDimensions(node).width / 2 } } : node,\n )\n }\n case 'centerVertical': {\n const positions = selectedNodes.map((node) => node.position.y + getNodeDimensions(node).height / 2)\n const centerY = (Math.min(...positions) + Math.max(...positions)) / 2\n return currentNodes.map((node) =>\n selectedNodeIds.has(node.id) ? { ...node, position: { ...node.position, y: centerY - getNodeDimensions(node).height / 2 } } : node,\n )\n }\n default:\n return currentNodes\n }\n })\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const contextMenuDistributeNodes = useCallback((direction: DistributeDirection) => {\n const selectedNodes = nodes.filter((node) => node.selected)\n if (selectedNodes.length < 3) return\n storeTakeSnapshot()\n\n const positionMap = new Map<string, number>()\n\n if (direction === 'horizontal') {\n const sorted = [...selectedNodes].sort((nodeA, nodeB) => nodeA.position.x - nodeB.position.x)\n const firstNode = sorted[0]\n const lastNode = sorted[sorted.length - 1]\n const totalWidth = (lastNode.position.x + getNodeDimensions(lastNode).width) - firstNode.position.x\n const nodesWidth = sorted.reduce((sum, node) => sum + getNodeDimensions(node).width, 0)\n const spacing = (totalWidth - nodesWidth) / (sorted.length - 1)\n let currentX = firstNode.position.x\n for (const node of sorted) {\n positionMap.set(node.id, currentX)\n currentX += getNodeDimensions(node).width + spacing\n }\n } else {\n const sorted = [...selectedNodes].sort((nodeA, nodeB) => nodeA.position.y - nodeB.position.y)\n const firstNode = sorted[0]\n const lastNode = sorted[sorted.length - 1]\n const totalHeight = (lastNode.position.y + getNodeDimensions(lastNode).height) - firstNode.position.y\n const nodesHeight = sorted.reduce((sum, node) => sum + getNodeDimensions(node).height, 0)\n const spacing = (totalHeight - nodesHeight) / (sorted.length - 1)\n let currentY = firstNode.position.y\n for (const node of sorted) {\n positionMap.set(node.id, currentY)\n currentY += getNodeDimensions(node).height + spacing\n }\n }\n\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (!positionMap.has(node.id)) return node\n const value = positionMap.get(node.id) ?? 0\n return direction === 'horizontal'\n ? { ...node, position: { ...node.position, x: value } }\n : { ...node, position: { ...node.position, y: value } }\n }),\n )\n }, [nodes, storeTakeSnapshot, setNodes])\n\n const storeClipboard = useWorkflowStore((state) => state.clipboard)\n const hasClipboardContent = storeClipboard !== null && storeClipboard.nodes.length > 0\n\n // Keyboard shortcuts\n useEffect(() => {\n const INPUT_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT'])\n\n function isInputFocused(): boolean {\n const activeElement = document.activeElement\n if (!activeElement) return false\n return INPUT_TAGS.has(activeElement.tagName) || (activeElement as HTMLElement).isContentEditable\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (isInputFocused()) return\n\n const isModifierPressed = event.metaKey || event.ctrlKey\n\n if (!isModifierPressed) {\n if (event.key === 'Escape') {\n handleDeselectAll()\n return\n }\n if (event.key.toLowerCase() === 'v') {\n setControlMode('pointer')\n return\n }\n if (event.key.toLowerCase() === 'h') {\n setControlMode('hand')\n return\n }\n if (event.key.toLowerCase() === 'g') {\n toggleDots()\n return\n }\n if (event.key.toLowerCase() === 'm') {\n toggleMinimap()\n return\n }\n // Shift+1 → Zoom to 100%\n if (event.shiftKey && event.key === '!') {\n event.preventDefault()\n zoomTo(1)\n return\n }\n // Shift+5 → Zoom to 50%\n if (event.shiftKey && event.key === '%') {\n event.preventDefault()\n zoomTo(0.5)\n return\n }\n return\n }\n\n switch (event.key.toLowerCase()) {\n case 'g': {\n event.preventDefault()\n if (event.shiftKey) {\n contextMenuUngroupSelected()\n } else {\n contextMenuGroupSelected()\n }\n break\n }\n case 'z': {\n if (event.shiftKey) {\n if (canRedo) {\n event.preventDefault()\n storeRedo()\n }\n } else {\n if (canUndo) {\n event.preventDefault()\n storeUndo()\n }\n }\n break\n }\n case 'y': {\n if (canRedo) {\n event.preventDefault()\n storeRedo()\n }\n break\n }\n case 'c': {\n event.preventDefault()\n storeCopy()\n break\n }\n case 'v': {\n event.preventDefault()\n storePaste()\n break\n }\n case 'a': {\n event.preventDefault()\n handleSelectAll()\n break\n }\n case 'd': {\n event.preventDefault()\n handleDuplicateSelected()\n break\n }\n case 'f': {\n if (event.shiftKey) {\n event.preventDefault()\n handleFitView()\n }\n break\n }\n case '1': {\n // Ctrl/Cmd+1 → Fit to view\n event.preventDefault()\n handleFitView()\n break\n }\n case '-':\n case '_': {\n // Ctrl/Cmd+- → Zoom out\n event.preventDefault()\n zoomOut()\n break\n }\n case '=':\n case '+': {\n // Ctrl/Cmd+= → Zoom in\n event.preventDefault()\n zoomIn()\n break\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, { capture: true })\n return () => {\n document.removeEventListener('keydown', handleKeyDown, { capture: true })\n }\n }, [canUndo, canRedo, storeUndo, storeRedo, storeCopy, storePaste, handleSelectAll, handleDeselectAll, handleFitView, handleDuplicateSelected, setControlMode, zoomTo, zoomIn, zoomOut, contextMenuGroupSelected, contextMenuUngroupSelected])\n\n // ==========================================================================\n // Graph serialization helper (shared by debounced save and immediate save)\n // ==========================================================================\n\n const serializeGraph = useCallback((): WorkflowGraph => {\n const flowObject = toObject()\n return {\n nodes: flowObject.nodes.map((node: Node) => {\n const nodeData = node.data as Record<string, unknown> | undefined\n const agent = nodeData?.agent as Record<string, unknown> | undefined\n const tool = nodeData?.tool as Record<string, unknown> | undefined\n const rule = nodeData?.rule as Record<string, unknown> | undefined\n const nodeConfig = nodeData?.config as LogicNodeConfig | undefined\n const serializedNode = {\n id: node.id,\n type: (node.type ?? 'agent') as WorkflowNodeType,\n position: node.position,\n data: {\n entityId: (nodeData?.entityId as string) ?? (agent?.agentId as string) ?? (tool?.toolId as string) ?? (rule?.ruleId as string) ?? node.type ?? '',\n label: (nodeData?.label as string) ?? (agent?.name as string) ?? (tool?.name as string) ?? (rule?.name as string) ?? '',\n ...(nodeConfig ? { config: nodeConfig } : {}),\n },\n // Persist group parent-child relationships\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.extent === 'parent' ? { extent: 'parent' as const } : {}),\n ...(node.style ? { style: node.style as { width?: number; height?: number } } : {}),\n }\n return serializedNode\n }),\n edges: flowObject.edges.map((edge: Edge) => ({\n id: edge.id,\n source: edge.source,\n target: edge.target,\n sourceHandle: edge.sourceHandle ?? '',\n targetHandle: edge.targetHandle ?? '',\n })),\n viewport: flowObject.viewport,\n }\n }, [toObject])\n\n // ==========================================================================\n // Graph change notification (debounced for auto-save)\n // ==========================================================================\n\n useEffect(() => {\n if (!onGraphChange) return\n\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n }\n\n graphChangeTimerRef.current = setTimeout(() => {\n onGraphChange(serializeGraph())\n }, AUTO_SAVE_DEBOUNCE_MS)\n\n return () => {\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n }\n }\n }, [nodes, edges, onGraphChange, serializeGraph])\n\n // ==========================================================================\n // Immediate save on visibility change / page unload (Dify-style)\n // ==========================================================================\n\n useEffect(() => {\n if (!onGraphChange) return\n\n const handleVisibilityChange = () => {\n if (document.visibilityState === 'hidden') {\n // Flush any pending debounced save immediately\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n graphChangeTimerRef.current = null\n }\n onGraphChange(serializeGraph())\n }\n }\n\n const handleBeforeUnload = () => {\n if (graphChangeTimerRef.current) {\n clearTimeout(graphChangeTimerRef.current)\n graphChangeTimerRef.current = null\n }\n onGraphChange(serializeGraph())\n }\n\n document.addEventListener('visibilitychange', handleVisibilityChange)\n window.addEventListener('beforeunload', handleBeforeUnload)\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [onGraphChange, serializeGraph])\n\n // ==========================================================================\n // Drag & drop handler — create node at drop position\n // ==========================================================================\n\n const onDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault()\n const nodeType = event.dataTransfer.getData('nodeType') as WorkflowNodeType\n const entityId = event.dataTransfer.getData('entityId')\n const label = event.dataTransfer.getData('label')\n const configRaw = event.dataTransfer.getData('config')\n\n if (!nodeType || !entityId) return\n\n storeTakeSnapshot()\n\n const position = screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n })\n\n const newNodeId = crypto.randomUUID()\n\n if (nodeType === 'agent') {\n const agent = agentMap.get(entityId)\n if (!agent) return\n const newNode: Node = {\n id: newNodeId,\n type: 'agent',\n position,\n data: {\n agent,\n order: agent.order ?? 0,\n selected: false,\n onSelect: () => {\n setSelectedAgentId(agent.agentId)\n openAgentModalAction(agent, models, false, agentTools, modelProviders)\n },\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies AgentNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'tool') {\n const tool = toolMap.get(entityId)\n if (!tool) return\n const newNode: Node = {\n id: newNodeId,\n type: 'tool',\n position,\n data: {\n tool,\n order: typeof tool.displayOrder === 'number' ? tool.displayOrder : 0,\n onEdit: onEditTool,\n onToggle: onToggleTool,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies ToolCanvasData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'agent_tool') {\n const agentTool = agentToolMap.get(entityId)\n if (!agentTool) return\n const newNode: Node = {\n id: newNodeId,\n type: 'agent_tool',\n position,\n data: {\n agentTool,\n order: 0,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n },\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'rule') {\n const rule = ruleMap.get(entityId)\n if (!rule) return\n const newNode: Node = {\n id: newNodeId,\n type: 'rule',\n position,\n data: {\n rule,\n order: typeof rule.priority === 'number' ? rule.priority : 0,\n onEdit: onEditRule,\n onToggle: onToggleRule,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies RuleNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'entity') {\n const entityConfig = configRaw\n ? JSON.parse(configRaw) as EntityNodeConfig\n : undefined\n if (!entityConfig) return\n const entity = entityMap.get(entityConfig.entityMasterId)\n const newNode: Node = {\n id: newNodeId,\n type: 'entity',\n position,\n data: {\n config: entityConfig,\n entity,\n label,\n onEdit: handleEditLogicNode,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies EntityNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (nodeType === 'group') {\n const groupConfig = configRaw\n ? JSON.parse(configRaw) as GroupNodeConfig\n : createDefaultLogicNodeConfig('group') as GroupNodeConfig\n if (!groupConfig) return\n const newNode: Node = {\n id: newNodeId,\n type: 'group',\n position,\n style: { width: groupConfig.width, height: groupConfig.height },\n data: {\n config: { ...groupConfig, label: label || 'Group' },\n label: label || 'Group',\n onEdit: handleEditLogicNode,\n onToggleExpand: handleToggleGroupExpand,\n onRemoveFromCanvas: handleRemoveNodeFromCanvas,\n } satisfies GroupNodeData,\n }\n setNodes((currentNodes) => [...currentNodes, newNode])\n } else if (isLogicNodeType(nodeType)) {\n const config = configRaw\n ? JSON.parse(configRaw) as LogicNodeConfig\n : createDefaultLogicNodeConfig(nodeType)\n if (!config) return\n\n // Check if dropping onto an expanded group node — re-parent\n const newNode: Node = {\n id: newNodeId,\n type: nodeType,\n position,\n data: {\n config,\n label,\n onEdit: handleEditLogicNode,\n },\n }\n\n setNodes((currentNodes) => {\n // Find if dropped position is inside an expanded group\n const targetGroup = currentNodes.find((node) => {\n if (node.type !== 'group') return false\n const groupData = node.data as GroupNodeData\n if (!groupData.config.isExpanded) return false\n const groupWidth = (node.style as { width?: number })?.width ?? groupData.config.width\n const groupHeight = (node.style as { height?: number })?.height ?? groupData.config.height\n return (\n position.x >= node.position.x &&\n position.x <= node.position.x + groupWidth &&\n position.y >= node.position.y &&\n position.y <= node.position.y + groupHeight\n )\n })\n\n if (targetGroup) {\n newNode.parentId = targetGroup.id\n newNode.extent = 'parent'\n // Convert to relative position within group\n newNode.position = {\n x: position.x - targetGroup.position.x,\n y: position.y - targetGroup.position.y,\n }\n }\n\n return [...currentNodes, newNode]\n })\n }\n },\n [screenToFlowPosition, agentMap, toolMap, ruleMap, entityMap, setNodes, onEditTool, onToggleTool, onEditRule, onToggleRule, handleEditLogicNode, handleToggleGroupExpand, handleRemoveNodeFromCanvas, storeTakeSnapshot]\n )\n\n const onDragOver = useCallback((event: React.DragEvent) => {\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n }, [])\n\n // ==========================================================================\n // Connection handler — draw edge between nodes\n // ==========================================================================\n\n /**\n * Resolve a human-readable edge label from the source handle.\n * Supports: IF/ELSE (true-out / false-out), Question Classifier (category-N),\n * and Iteration (loop-out).\n */\n const resolveEdgeLabel = useCallback(\n (sourceHandle: string | null | undefined, sourceNodeId: string): string | undefined => {\n if (!sourceHandle) return undefined\n if (sourceHandle === 'true-out') return 'True'\n if (sourceHandle === 'false-out') return 'False'\n if (sourceHandle === 'loop-out') return 'Loop'\n\n // Question Classifier: category-0, category-1, …\n const categoryMatch = sourceHandle.match(/^category-(\\d+)$/)\n if (categoryMatch) {\n const categoryIndex = Number.parseInt(categoryMatch[1], 10)\n const sourceNode = getNode(sourceNodeId)\n if (sourceNode) {\n const nodeData = sourceNode.data as Record<string, unknown>\n const config = nodeData.config as { categories?: Array<{ name: string }> } | undefined\n if (config?.categories?.[categoryIndex]) {\n return config.categories[categoryIndex].name\n }\n }\n return `Category ${categoryIndex + 1}`\n }\n\n return undefined\n },\n [getNode]\n )\n\n const onConnect = useCallback(\n (connection: Connection) => {\n storeTakeSnapshot()\n\n const edgeLabel = resolveEdgeLabel(connection.sourceHandle, connection.source)\n\n // Aggregator auto-port: a variable_aggregator renders `inputVariables.length`\n // target handles (`input-0`..`input-{N-1}`). When a new edge lands on one\n // without a targetHandle, React Flow snaps it to the first handle — so\n // every connection stacks on `input-0` and visually the fan-in looks\n // like a single cable. Intercept the connection to (a) pick the next\n // free `input-N` handle and (b) grow `config.inputVariables` so the\n // port actually appears.\n const targetNode = connection.target ? getNode(connection.target) : undefined\n let resolvedConnection: Connection = connection\n if (targetNode?.type === 'variable_aggregator') {\n const aggConfig = (targetNode.data as { config?: { inputVariables?: string[] } }).config\n const existingInputs = aggConfig?.inputVariables ?? []\n const nextIndex = existingInputs.length\n const nextHandle = `input-${nextIndex}`\n resolvedConnection = { ...connection, targetHandle: nextHandle }\n\n const nextVarName = connection.source ?? `input-${nextIndex + 1}`\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (node.id !== connection.target) return node\n const data = node.data as VariableAggregatorNodeData\n const nextConfig = {\n ...(data.config ?? { type: 'variable_aggregator' as const, inputVariables: [], outputVariable: 'context' }),\n inputVariables: [...existingInputs, nextVarName],\n }\n return { ...node, data: { ...data, config: nextConfig } }\n })\n )\n }\n\n setEdges((currentEdges) =>\n addEdge(\n {\n ...resolvedConnection,\n type: 'default',\n animated: true,\n data: { label: edgeLabel, onInsertNode: insertNodeOnEdge },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n },\n currentEdges\n )\n )\n },\n [setEdges, setNodes, getNode, storeTakeSnapshot, resolveEdgeLabel, insertNodeOnEdge]\n )\n\n // Connection validation: extended for all 20 node types\n const isValidConnection = useCallback(\n (connection: Connection | Edge) => {\n const sourceNode = getNode(connection.source)\n const targetNode = getNode(connection.target)\n if (!sourceNode || !targetNode) return false\n\n // No self-connections\n if (connection.source === connection.target) return false\n\n const sourceType = sourceNode.type as WorkflowNodeType\n const targetType = targetNode.type as WorkflowNodeType\n\n // Note nodes cannot connect at all — they are annotations\n if (sourceType === 'note' || targetType === 'note') return false\n\n // Start can only be a source, never a target\n if (targetType === 'start') return false\n // End can only be a target, never a source\n if (sourceType === 'end') return false\n // Answer is a terminal node — target only, no outgoing\n if (sourceType === 'answer') return false\n\n // iteration_start can only accept source from iteration node\n if (targetType === 'iteration_start' && sourceType !== 'iteration') return false\n\n // Tool → Agent only\n if (sourceType === 'tool') return targetType === 'agent'\n // Agent → Agent, Rule, or any logic node (not tool)\n if (sourceType === 'agent') return targetType !== 'tool'\n // Rule cannot be a source\n if (sourceType === 'rule') return false\n\n // Start → any (except start, already handled)\n if (sourceType === 'start') return true\n // IF/ELSE → any (has true-out and false-out)\n if (sourceType === 'if_else') return true\n // Question Classifier → any (has N category outputs)\n if (sourceType === 'question_classifier') return true\n // Iteration → any (has right-out and loop-out)\n if (sourceType === 'iteration') return true\n\n // Standard logic nodes (code, http_request, template_transform,\n // knowledge_base, parameter_extractor, variable_assigner,\n // variable_aggregator, document_extractor, list_operator,\n // iteration_start) → any valid target\n if (isLogicNodeType(sourceType)) return true\n\n return false\n },\n [getNode]\n )\n\n const onNodesDelete = useCallback(\n (deletedNodes: Node[]) => {\n storeTakeSnapshot()\n // Deletion is handled by React Flow — snapshot taken for undo\n void deletedNodes\n },\n [storeTakeSnapshot]\n )\n\n // ==========================================================================\n // Edge mid-point node insertion (Dify-style + button)\n // ==========================================================================\n\n // Keep the ref in sync with the latest closure\n insertNodeOnEdgeRef.current = useCallback(\n (edgeId: string, nodeType: WorkflowNodeType, position: { x: number; y: number }) => {\n if (!isLogicNodeType(nodeType)) return\n\n storeTakeSnapshot()\n\n const config = createDefaultLogicNodeConfig(nodeType)\n if (!config) return\n\n const newNodeId = crypto.randomUUID()\n const newNode: Node = {\n id: newNodeId,\n type: nodeType,\n position: { x: position.x - 130, y: position.y - 40 },\n data: {\n config,\n label: nodeType.replace(/_/g, ' ').replace(/\\b\\w/g, (character) => character.toUpperCase()),\n onEdit: handleEditLogicNode,\n },\n }\n\n setNodes((currentNodes) => [...currentNodes, newNode])\n\n setEdges((currentEdges) => {\n const originalEdge = currentEdges.find((edge) => edge.id === edgeId)\n if (!originalEdge) return currentEdges\n\n const edgesWithoutOriginal = currentEdges.filter((edge) => edge.id !== edgeId)\n\n const sourceToNewEdge: Edge = {\n id: crypto.randomUUID(),\n source: originalEdge.source,\n target: newNodeId,\n sourceHandle: originalEdge.sourceHandle,\n targetHandle: 'left-in',\n type: 'default',\n animated: true,\n data: {\n label: (originalEdge.data as Record<string, unknown> | undefined)?.label as string | undefined,\n onInsertNode: insertNodeOnEdge,\n },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n }\n\n const newToTargetEdge: Edge = {\n id: crypto.randomUUID(),\n source: newNodeId,\n target: originalEdge.target,\n sourceHandle: 'right-out',\n targetHandle: originalEdge.targetHandle,\n type: 'default',\n animated: true,\n data: { onInsertNode: insertNodeOnEdge },\n style: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },\n markerEnd: { type: MarkerType.ArrowClosed, color: GRAPH_ACTIVE_EDGE_COLOR },\n }\n\n return [...edgesWithoutOriginal, sourceToNewEdge, newToTargetEdge]\n })\n },\n [storeTakeSnapshot, setNodes, setEdges, handleEditLogicNode, insertNodeOnEdge]\n )\n\n // ==========================================================================\n // Context menus (Dify-style right-click menus)\n // ==========================================================================\n\n type ContextMenuState = {\n type: 'node' | 'panel' | 'selection'\n position: { x: number; y: number }\n flowPosition?: { x: number; y: number }\n targetId?: string\n } | null\n\n const [contextMenu, setContextMenu] = useState<ContextMenuState>(null)\n\n const handleNodeContextMenu = useCallback(\n (event: React.MouseEvent, node: Node) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n setContextMenu({\n type: 'node',\n position: { x: event.clientX, y: event.clientY },\n targetId: node.id,\n })\n },\n []\n )\n\n const handlePaneContextMenu = useCallback(\n (event: MouseEvent | React.MouseEvent) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n const flowPos = screenToFlowPosition({ x: event.clientX, y: event.clientY })\n setContextMenu({\n type: 'panel',\n position: { x: event.clientX, y: event.clientY },\n flowPosition: flowPos,\n })\n },\n [screenToFlowPosition]\n )\n\n const handleSelectionContextMenu = useCallback(\n (event: MouseEvent | React.MouseEvent) => {\n event.preventDefault()\n if (Date.now() - lastContextMenuCloseRef.current < 50) return\n setContextMenu({\n type: 'selection',\n position: { x: event.clientX, y: event.clientY },\n })\n },\n []\n )\n\n // Anti-race-condition guard: prevent context menu from re-opening immediately\n // after a close (mousedown close fires, then contextmenu event re-opens)\n const lastContextMenuCloseRef = useRef<number>(0)\n\n const closeContextMenu = useCallback(() => {\n setContextMenu((previous) => {\n if (previous !== null) {\n lastContextMenuCloseRef.current = Date.now()\n }\n return null\n })\n }, [])\n\n // Close context menu on pane/node/edge click or canvas move\n const handlePaneClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n const handleNodeClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n const handleEdgeClick = useCallback(() => { closeContextMenu() }, [closeContextMenu])\n\n // Logic node editing: derive the editing node's config from current nodes\n const editingLogicNode = useMemo(() => {\n if (!editingLogicNodeId) return null\n const node = nodes.find((matchingNode) => matchingNode.id === editingLogicNodeId)\n if (!node) return null\n const nodeData = node.data as Record<string, unknown>\n const config = nodeData.config as LogicNodeConfig\n const label = (nodeData.label as string) ?? ''\n return { nodeId: editingLogicNodeId, config, label }\n }, [editingLogicNodeId, nodes])\n\n const handleSaveLogicNodeConfig = useCallback((nodeId: string, updatedConfig: LogicNodeConfig) => {\n storeTakeSnapshot()\n setNodes((currentNodes) =>\n currentNodes.map((node) => {\n if (node.id !== nodeId) return node\n const updatedData: Record<string, unknown> = { ...node.data, config: updatedConfig }\n // Sync data.label when group config label changes\n if (updatedConfig.type === 'group' && 'label' in updatedConfig) {\n updatedData.label = updatedConfig.label\n }\n return { ...node, data: updatedData }\n })\n )\n setEditingLogicNodeId(null)\n }, [setNodes, storeTakeSnapshot])\n\n return (\n <>\n <div className=\"relative h-full w-full\">\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onConnect={onConnect}\n onDrop={onDrop}\n onDragOver={onDragOver}\n onNodesDelete={onNodesDelete}\n onNodeDragStart={onNodeDragStart}\n onPaneClick={handlePaneClick}\n onNodeClick={handleNodeClick}\n onEdgeClick={handleEdgeClick}\n onNodeContextMenu={handleNodeContextMenu}\n onPaneContextMenu={handlePaneContextMenu}\n onSelectionContextMenu={handleSelectionContextMenu}\n isValidConnection={isValidConnection}\n nodeTypes={mergedNodeTypes}\n edgeTypes={edgeTypes}\n defaultEdgeOptions={DEFAULT_EDGE_OPTIONS}\n connectionLineComponent={CustomConnectionLine}\n panOnDrag={controlMode === 'hand' ? true : [1, 2]}\n selectionOnDrag={controlMode === 'pointer'}\n snapToGrid\n snapGrid={SNAP_GRID}\n fitView\n fitViewOptions={{ padding: 0.2 }}\n minZoom={0.3}\n maxZoom={1.5}\n defaultViewport={{ x: 0, y: 0, zoom: 0.8 }}\n proOptions={{ hideAttribution: true }}\n deleteKeyCode={['Backspace', 'Delete']}\n connectionLineStyle={{ stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 }}\n >\n {showDots && (\n <Background\n variant={BackgroundVariant.Dots}\n gap={20}\n size={1}\n className=\"!bg-transparent\"\n />\n )}\n {showMinimap && (\n <MiniMap\n nodeColor={getMinimapNodeColor}\n maskColor=\"rgba(0, 0, 0, 0.08)\"\n className=\"!rounded-lg !border-white/30 !shadow-lg !backdrop-blur-xl dark:!border-white/10 [&]:!bg-white/50 dark:[&]:!bg-gray-900/60\"\n style={{ '--xy-minimap-background-color': 'transparent' } as React.CSSProperties}\n pannable\n zoomable\n />\n )}\n </ReactFlow>\n\n {/* Draggable floating command bar — outside ReactFlow so backdrop-filter works */}\n <DraggableCommandBar\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n onFitView={handleFitView}\n onUndo={storeUndo}\n onRedo={storeRedo}\n canUndo={canUndo}\n canRedo={canRedo}\n controlMode={controlMode}\n onControlModeChange={setControlMode}\n showMinimap={showMinimap}\n onToggleMinimap={toggleMinimap}\n showDots={showDots}\n onToggleDots={toggleDots}\n cardDisplayMode={cardDisplayMode}\n onToggleCardDisplayMode={toggleCardDisplayMode}\n layoutDirection={layoutDirection}\n onLayoutDirectionChange={handleLayoutDirectionChange}\n showShortcuts={showShortcuts}\n onToggleShortcuts={toggleShortcuts}\n onCloseShortcuts={closeShortcuts}\n tWorkflow={tWorkflow}\n />\n\n {/* Right-click context menus (Dify-style) */}\n {contextMenu?.type === 'node' && contextMenu.targetId && (\n <NodeContextMenu\n position={contextMenu.position}\n targetId={contextMenu.targetId}\n onClose={closeContextMenu}\n onEdit={contextMenuEditNode}\n onDuplicate={contextMenuDuplicateNode}\n onCopy={contextMenuCopyNode}\n onDelete={contextMenuDeleteNode}\n />\n )}\n {contextMenu?.type === 'panel' && contextMenu.flowPosition && (\n <PanelContextMenu\n position={contextMenu.position}\n flowPosition={contextMenu.flowPosition}\n onClose={closeContextMenu}\n onPaste={contextMenuPaste}\n onSelectAll={handleSelectAll}\n onFitView={handleFitView}\n onAddNote={contextMenuAddNote}\n hasClipboardContent={hasClipboardContent}\n />\n )}\n {contextMenu?.type === 'selection' && (\n <SelectionContextMenu\n position={contextMenu.position}\n onClose={closeContextMenu}\n onCopy={contextMenuCopySelection}\n onDuplicate={contextMenuDuplicateSelection}\n onDelete={contextMenuDeleteSelection}\n onGroupSelected={contextMenuGroupSelected}\n onAlign={contextMenuAlignNodes}\n onDistribute={contextMenuDistributeNodes}\n />\n )}\n </div>\n\n {renderAgentModal?.({\n agent: selectedAgent,\n models,\n open: modalOpen || isCreatingAgent,\n isCreateMode: isCreatingAgent,\n onClose: () => {\n closeModalAction()\n setSelectedAgentId(null)\n if (isCreatingAgent) onCancelCreateAgent?.()\n },\n onSaved: () => {\n closeModalAction()\n setSelectedAgentId(null)\n if (isCreatingAgent) onCancelCreateAgent?.()\n onAgentSaved?.()\n },\n })}\n\n <LogicNodeModal\n onSave={(nodeId, config) => {\n handleSaveLogicNodeConfig(nodeId, config)\n closeModalAction()\n setEditingLogicNodeId(null)\n }}\n entities={allEntities}\n />\n\n {/* Datasource modal — standalone GlassModal with sidebar */}\n {editingLogicNode?.config?.type === 'datasource' && (\n <DatasourceNodeConfigForm\n open\n nodeId={editingLogicNode.nodeId}\n config={editingLogicNode.config as DatasourceNodeConfig}\n readOnly={Boolean((nodes.find((n) => n.id === editingLogicNode.nodeId)?.data as Record<string, unknown>)?.readOnly)}\n onSave={(updatedConfig) => {\n handleSaveLogicNodeConfig(editingLogicNode.nodeId, updatedConfig)\n setEditingLogicNodeId(null)\n }}\n onCancel={() => setEditingLogicNodeId(null)}\n datasources={datasources}\n onLoadTables={onLoadTables ?? (async () => [])}\n onLoadSchema={onLoadSchema ?? (async () => [])}\n />\n )}\n </>\n )\n}\n\n// ============================================================================\n// Wrapper with ReactFlowProvider\n// ============================================================================\n\nexport function WorkflowCanvas(props: WorkflowCanvasProps) {\n return (\n <ReactFlowProvider>\n <WorkflowCanvasInner {...props} />\n </ReactFlowProvider>\n )\n}\n","import { createContext, useContext, useMemo } from 'react'\nimport type { AgentModel, AgentRule, WorkflowTool, Workflow, WorkflowGraph } from './contracts'\nimport type { AgentWithPrompts } from './types'\n\ntype WorkspaceBootstrapPayload = {\n workflow: Workflow | null\n graph: WorkflowGraph | null\n agents: AgentWithPrompts[]\n models: AgentModel[]\n tools: WorkflowTool[]\n rules: AgentRule[]\n}\n\ntype LambdaEnvelope<T> = {\n success: boolean\n data?: T\n error?: string\n}\n\ntype WorkflowBuilderClient = {\n publishableKey: string\n getWorkspaceBootstrap: (workflowId: string) => Promise<WorkspaceBootstrapPayload>\n}\n\ntype WorkflowBuilderProviderProps = {\n publishableKey: string\n children: React.ReactNode\n}\n\nfunction tryDecodeBase64Url(value: string): string | null {\n try {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')\n if (typeof atob === 'function') return atob(padded)\n } catch {\n return null\n }\n return null\n}\n\nfunction extractApiBaseFromPublishableKey(publishableKey: string): string | null {\n const directUrl = publishableKey.match(/https?:\\/\\/[^\\s|,;]+/i)?.[0]\n if (directUrl) return directUrl.replace(/\\/$/, '')\n\n const segments = publishableKey.split(/[.:_-]/).filter(Boolean)\n for (const segment of segments) {\n const decoded = tryDecodeBase64Url(segment)\n if (decoded && /^https?:\\/\\//i.test(decoded)) {\n return decoded.replace(/\\/$/, '')\n }\n }\n\n return null\n}\n\nfunction resolveWorkflowApiBaseUrl(publishableKey: string): string {\n const fromKey = extractApiBaseFromPublishableKey(publishableKey)\n if (fromKey) return fromKey\n throw new Error('Invalid publishable key: missing workflow API host.')\n}\n\nasync function fetchWorkflowApiData<T>(publishableKey: string, path: string): Promise<T> {\n const response = await fetch(`${resolveWorkflowApiBaseUrl(publishableKey)}${path}`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${publishableKey}`,\n 'X-Workflow-Key': publishableKey,\n 'Content-Type': 'application/json',\n },\n })\n\n const json = await response.json() as LambdaEnvelope<T>\n if (!response.ok || !json.success || !json.data) {\n throw new Error(json.error ?? `Workflow API request failed (${response.status})`)\n }\n return json.data\n}\n\nconst WorkflowBuilderContext = createContext<WorkflowBuilderClient | null>(null)\n\nexport function WorkflowBuilderProvider({\n publishableKey,\n children,\n}: WorkflowBuilderProviderProps) {\n const client = useMemo<WorkflowBuilderClient>(() => ({\n publishableKey,\n getWorkspaceBootstrap: async (workflowId: string) => {\n const [workflow, agents, models, tools, rules] = await Promise.all([\n fetchWorkflowApiData<Workflow>(publishableKey, `/workflows/${encodeURIComponent(workflowId)}`),\n fetchWorkflowApiData<Array<{ agentId: string; id?: string; name: string; order?: number }>>(publishableKey, '/agents/configs'),\n fetchWorkflowApiData<AgentModel[]>(publishableKey, '/agents/models'),\n fetchWorkflowApiData<WorkflowTool[]>(publishableKey, '/agents/tools'),\n fetchWorkflowApiData<AgentRule[]>(publishableKey, '/rules'),\n ])\n\n return {\n workflow,\n graph: workflow.graph ?? null,\n agents: agents.map((agent) => ({\n ...agent,\n promptCount: 0,\n activePromptVersion: 0,\n })),\n models,\n tools,\n rules,\n }\n },\n }), [publishableKey])\n\n return (\n <WorkflowBuilderContext.Provider value={client}>\n {children}\n </WorkflowBuilderContext.Provider>\n )\n}\n\nexport function useWorkflowBuilderClient(): WorkflowBuilderClient {\n const context = useContext(WorkflowBuilderContext)\n if (!context) {\n throw new Error('useWorkflowBuilderClient must be used within WorkflowBuilderProvider')\n }\n return context\n}\n\nexport function useWorkflowBuilderClientOptional(): WorkflowBuilderClient | null {\n return useContext(WorkflowBuilderContext)\n}\n\nexport type {\n WorkspaceBootstrapPayload,\n WorkflowBuilderClient,\n WorkflowBuilderProviderProps,\n}\n","import { useEffect, useMemo, useState, type ComponentProps } from 'react'\nimport { I18nProvider, createI18nFromMessages } from '@ui/lib/i18n-context'\nimport { WorkflowCanvas as BuilderWorkflowCanvas } from './components/canvas/workflow-canvas'\nimport { useWorkflowBuilderClientOptional } from './workflow-provider'\nimport type { WorkflowGraph } from './contracts'\n\ntype BuilderCanvasProps = ComponentProps<typeof BuilderWorkflowCanvas>\n\nexport type WorkspaceProps = {\n locale?: string\n messages?: Record<string, unknown>\n className?: string\n workflowId?: string\n} & Partial<BuilderCanvasProps>\n\nexport function Workspace({\n locale = 'en',\n messages = {},\n className,\n workflowId,\n ...canvasProps\n}: WorkspaceProps) {\n const workflowBuilderClient = useWorkflowBuilderClientOptional()\n const [bootstrapGraph, setBootstrapGraph] = useState<WorkflowGraph | null>(null)\n const [bootstrapAgents, setBootstrapAgents] = useState<NonNullable<BuilderCanvasProps['agents']>>([])\n const [bootstrapModels, setBootstrapModels] = useState<NonNullable<BuilderCanvasProps['models']>>([])\n const [bootstrapTools, setBootstrapTools] = useState<NonNullable<BuilderCanvasProps['tools']>>([])\n const [bootstrapRules, setBootstrapRules] = useState<NonNullable<BuilderCanvasProps['rules']>>([])\n\n const shouldBootstrapFromProvider = useMemo(\n () => Boolean(workflowId && (!canvasProps.agents || !canvasProps.models)),\n [workflowId, canvasProps.agents, canvasProps.models],\n )\n\n useEffect(() => {\n if (!shouldBootstrapFromProvider || !workflowId || !workflowBuilderClient) {\n return\n }\n\n void workflowBuilderClient.getWorkspaceBootstrap(workflowId)\n .then((payload) => {\n setBootstrapGraph(payload.graph)\n setBootstrapAgents(payload.agents)\n setBootstrapModels(payload.models)\n setBootstrapTools(payload.tools)\n setBootstrapRules(payload.rules)\n })\n .catch(() => {\n // Keep previous behavior/style: render canvas with existing props on bootstrap failures.\n })\n }, [shouldBootstrapFromProvider, workflowId, workflowBuilderClient])\n\n const resolvedGraph = canvasProps.initialGraph ?? bootstrapGraph\n const resolvedAgents = canvasProps.agents ?? bootstrapAgents\n const resolvedModels = canvasProps.models ?? bootstrapModels\n const resolvedTools = canvasProps.tools ?? bootstrapTools\n const resolvedRules = canvasProps.rules ?? bootstrapRules\n\n return (\n <div className={className ?? 'h-full w-full'}>\n <I18nProvider value={createI18nFromMessages(locale, messages as Record<string, unknown>)}>\n <BuilderWorkflowCanvas\n {...canvasProps}\n initialGraph={resolvedGraph}\n agents={resolvedAgents}\n models={resolvedModels}\n tools={resolvedTools}\n rules={resolvedRules}\n />\n </I18nProvider>\n </div>\n )\n}\n"]}