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