feat: Add Protocol 13 adaptive optimization, Plotly charts, and dashboard improvements

## Protocol 13: Adaptive Multi-Objective Optimization
- Iterative FEA + Neural Network surrogate workflow
- Initial FEA sampling, NN training, NN-accelerated search
- FEA validation of top NN predictions, retraining loop
- adaptive_state.json tracks iteration history and best values
- M1 mirror study (V11) with 103 FEA, 3000 NN trials

## Dashboard Visualization Enhancements
- Added Plotly.js interactive charts (parallel coords, Pareto, convergence)
- Lazy loading with React.lazy() for performance
- Code splitting: plotly.js-basic-dist (~1MB vs 3.5MB)
- Chart library toggle (Recharts default, Plotly on-demand)
- ExpandableChart component for full-screen modal views
- ConsoleOutput component for real-time log viewing

## Documentation
- Protocol 13 detailed documentation
- Dashboard visualization guide
- Plotly components README
- Updated run-optimization skill with Mode 5 (adaptive)

## Bug Fixes
- Fixed TypeScript errors in dashboard components
- Fixed Card component to accept ReactNode title
- Removed unused imports across components

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Antoine
2025-12-04 07:41:54 -05:00
parent e74f1ccf36
commit 8cbdbcad78
270 changed files with 15471 additions and 517 deletions

View File

@@ -1,4 +1,4 @@
import { Study, StudyListResponse, HistoryResponse, PruningResponse, StudyStatus } from '../types';
import { StudyListResponse, HistoryResponse, PruningResponse, StudyStatus } from '../types';
const API_BASE = '/api';
@@ -43,6 +43,19 @@ class ApiClient {
return response.json();
}
async getConsoleOutput(studyId: string, lines: number = 200): Promise<{
lines: string[];
total_lines: number;
displayed_lines: number;
log_file: string | null;
timestamp: string;
message?: string;
}> {
const response = await fetch(`${API_BASE}/optimization/studies/${studyId}/console?lines=${lines}`);
if (!response.ok) throw new Error('Failed to fetch console output');
return response.json();
}
// Future endpoints for control
async startOptimization(studyId: string): Promise<void> {
const response = await fetch(`${API_BASE}/optimization/studies/${studyId}/start`, { method: 'POST' });