Phase 1-7 of Canvas V4 Ralph Loop implementation:
Backend:
- Add /api/files routes for browsing model files
- Add /api/nx routes for NX model introspection
- Add NXIntrospector service to discover expressions and extractors
- Add health check with database status
Frontend:
- Add FileBrowser component for selecting .sim/.prt/.fem files
- Add IntrospectionPanel to discover expressions and extractors
- Update NodeConfigPanel with browse and introspect buttons
- Update schema with NODE_HANDLES for proper flow direction
- Update validation for correct DesignVar -> Model -> Solver flow
- Update useCanvasStore.addNode() to accept custom data
Flow correction: Design Variables now connect TO Model (as source),
not FROM Model. This matches the actual data flow in optimization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 5 of Canvas Professional Upgrade:
- Create ExpressionSelector component with searchable dropdown
- Fetch expressions from NX introspection API
- Auto-populate label, units, and default min/max from expression value
- Add refresh button to reload expressions
- Integrate into NodeConfigPanel for DesignVar nodes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Canvas Builder Visual Updates:
- Update all Canvas components to use Atomaster dark theme
- BaseNode: dark background (bg-dark-800), white text, primary selection glow
- NodePalette: dark sidebar with hover states
- NodeConfigPanel: dark inputs, labels, and panel background
- ValidationPanel: semi-transparent error/warning panels with backdrop blur
- ChatPanel: dark message area with themed welcome state
- ExecuteDialog: dark modal with primary button styling
- ConfigImporter: dark tabs, inputs, and file upload zone
- TemplateSelector: dark cards with category pills and hover effects
Setup Page Integration:
- Add Configuration/Canvas Builder tab switcher
- Canvas tab renders AtomizerCanvas full-height
- Tabs styled to match Atomaster theme
Build: Passes TypeScript and Vite build
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>