/** * Canvas Schema - Type definitions for optimization workflow nodes */ export type NodeType = | 'model' | 'solver' | 'designVar' | 'extractor' | 'objective' | 'constraint' | 'algorithm' | 'surrogate'; export interface BaseNodeData { label: string; configured: boolean; errors?: string[]; } export interface ModelNodeData extends BaseNodeData { type: 'model'; filePath?: string; fileType?: 'prt' | 'fem' | 'sim'; } export interface SolverNodeData extends BaseNodeData { type: 'solver'; solverType?: 'SOL101' | 'SOL103' | 'SOL105' | 'SOL106' | 'SOL111' | 'SOL112'; } export interface DesignVarNodeData extends BaseNodeData { type: 'designVar'; expressionName?: string; minValue?: number; maxValue?: number; unit?: string; } export interface ExtractorNodeData extends BaseNodeData { type: 'extractor'; extractorId?: string; extractorName?: string; config?: Record; } export interface ObjectiveNodeData extends BaseNodeData { type: 'objective'; name?: string; direction?: 'minimize' | 'maximize'; weight?: number; } export interface ConstraintNodeData extends BaseNodeData { type: 'constraint'; name?: string; operator?: '<' | '<=' | '>' | '>=' | '=='; value?: number; } export interface AlgorithmNodeData extends BaseNodeData { type: 'algorithm'; method?: 'TPE' | 'CMA-ES' | 'NSGA-II' | 'GP-BO' | 'RandomSearch'; maxTrials?: number; } export interface SurrogateNodeData extends BaseNodeData { type: 'surrogate'; enabled?: boolean; modelType?: 'MLP' | 'GNN' | 'Ensemble'; minTrials?: number; } export type CanvasNodeData = | ModelNodeData | SolverNodeData | DesignVarNodeData | ExtractorNodeData | ObjectiveNodeData | ConstraintNodeData | AlgorithmNodeData | SurrogateNodeData; export interface CanvasEdge { id: string; source: string; target: string; sourceHandle?: string; targetHandle?: string; } // Valid connections export const VALID_CONNECTIONS: Record = { model: ['solver', 'designVar'], solver: ['extractor'], designVar: ['model'], extractor: ['objective', 'constraint'], objective: ['algorithm'], constraint: ['algorithm'], algorithm: ['surrogate'], surrogate: [], };