Drag-drop fixes:
- Fix Objective default data: use nested 'source' object with extractor_id/output_name
- Fix Constraint default data: use 'type' field (not constraint_type), 'threshold' (not limit)
Undo/Redo fixes:
- Remove dependency on isDirty flag (which is always false due to auto-save)
- Record snapshots based on actual spec changes via deep comparison
Code generation improvements:
- Update system prompt to support multiple extractor types:
* OP2-based extractors for FEA results (stress, displacement, frequency)
* Expression-based extractors for NX model values (dimensions, volumes)
* Computed extractors for derived values (no FEA needed)
- Claude will now choose appropriate signature based on user's description
Backend:
- Add POST /generate-extractor for AI code generation via Claude CLI
- Add POST /generate-extractor/stream for SSE streaming generation
- Add POST /validate-extractor with enhanced syntax checking
- Add POST /check-dependencies for import analysis
- Add POST /test-extractor for live OP2 file testing
- Add ClaudeCodeSession service for managing CLI sessions
Frontend:
- Add lib/api/claude.ts with typed API functions
- Enhance CodeEditorPanel with:
- Streaming generation with live preview
- Code snippets library (6 templates: displacement, stress, frequency, mass, energy, reaction)
- Test button for live OP2 validation
- Cancel button for stopping generation
- Dependency warnings display
- Integrate streaming and testing into NodeConfigPanelV2
Uses Claude CLI (--print mode) to leverage Pro/Max subscription without API costs.