You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a visual drag-and-drop workflow builder to the dashboard. Users select from available registered nodes, drag them onto a canvas, connect them visually, and the UI generates the graph JSON configuration.
Current State
What Exists
Component
Location
Purpose
GraphTemplateBuilder
dashboard/src/components/
Form-based builder (text inputs, JSON)
GraphVisualization
dashboard/src/components/
ReactFlow-based viewer for executed runs
ReactFlow
Already installed
Used for run visualization
Current Builder Limitations
Manual text entry for node names, namespaces
JSON textarea for inputs
Comma-separated text for next_nodes
No visibility into available registered nodes
No visual representation of the graph structure
Error-prone for complex workflows
Proposed Solution
Visual Builder with Node Palette
flowchart LR
subgraph "Node Palette"
API["/api/nodes"]
PALETTE[Available Nodes Panel]
API --> PALETTE
end
subgraph "Canvas"
DRAG[Drag & Drop]
CONNECT[Visual Connections]
CONFIG[Node Config Panel]
end
subgraph "Output"
JSON[Graph JSON]
SAVE[Save to API]
end
PALETTE --> DRAG
DRAG --> CONNECT
CONNECT --> JSON
JSON --> SAVE
Loading
Key Features
Node Palette: Shows all registered nodes in the namespace
Drag & Drop: Drag nodes from palette onto canvas
Visual Connections: Click and drag to connect node outputs to inputs
Node Configuration: Click a node to configure inputs, identifier
Input Mapping UI: Visual helper for ${{ source.outputs.field }} syntax
// Get registered nodes for a namespaceGET/api/nodes?namespace={namespace}// Response includes input/output schemas{"nodes": [{"name": "DataLoader","namespace": "MyProject","inputs_schema": { ... },"outputs_schema": { ... }}]}
The inputs_schema and outputs_schema are already captured during node registration - these drive the builder UI.
Prototype Scope
In Scope
Node palette showing registered nodes
Drag nodes onto canvas
Visual edge connections between nodes
Node configuration panel (identifier, inputs)
Basic input mapping helper (${{ }} syntax)
Generate valid graph JSON
Save graph template
Out of Scope (Future)
Undo/redo
Copy/paste nodes
Templates/presets
Collaborative editing
Version comparison
Auto-layout algorithms
Key Challenges
Challenge
Approach
Input mapping syntax is complex
Provide dropdown picker: "Select source node" → "Select output field"
Validation before save
Real-time validation using same logic as backend
Large graphs
ReactFlow handles this well; add minimap
Schema-driven inputs
Generate form fields from inputs_schema
Success Criteria
User can see all registered nodes in the namespace
Add a visual drag-and-drop workflow builder to the dashboard. Users select from available registered nodes, drag them onto a canvas, connect them visually, and the UI generates the graph JSON configuration.
Current State
What Exists
GraphTemplateBuilderdashboard/src/components/GraphVisualizationdashboard/src/components/Current Builder Limitations
next_nodesProposed Solution
Visual Builder with Node Palette
flowchart LR subgraph "Node Palette" API["/api/nodes"] PALETTE[Available Nodes Panel] API --> PALETTE end subgraph "Canvas" DRAG[Drag & Drop] CONNECT[Visual Connections] CONFIG[Node Config Panel] end subgraph "Output" JSON[Graph JSON] SAVE[Save to API] end PALETTE --> DRAG DRAG --> CONNECT CONNECT --> JSON JSON --> SAVEKey Features
${{ source.outputs.field }}syntaxData Flow
flowchart TB API[Registered Nodes API] --> PALETTE[Node Palette] PALETTE -->|drag| CANVAS[Canvas State] CANVAS -->|select| CONFIG[Config Panel] CONFIG -->|update| CANVAS CANVAS -->|connect| EDGES[Edge State] CANVAS --> TRANSFORM[Transform to Graph JSON] EDGES --> TRANSFORM TRANSFORM --> PREVIEW[Preview] TRANSFORM --> SAVE[Save API]API Requirements
Existing Endpoint (May Need Enhancement)
The
inputs_schemaandoutputs_schemaare already captured during node registration - these drive the builder UI.Prototype Scope
In Scope
${{ }}syntax)Out of Scope (Future)
Key Challenges
inputs_schemaSuccess Criteria
References
dashboard/src/components/GraphTemplateBuilder.tsxdashboard/src/components/GraphVisualization.tsx