feat: Add dashboard chat integration and MCP server

Major changes:
- Dashboard: WebSocket-based chat with session management
- Dashboard: New chat components (ChatPane, ChatInput, ModeToggle)
- Dashboard: Enhanced UI with parallel coordinates chart
- MCP Server: New atomizer-tools server for Claude integration
- Extractors: Enhanced Zernike OPD extractor
- Reports: Improved report generator

New studies (configs and scripts only):
- M1 Mirror: Cost reduction campaign studies
- Simple Beam, Simple Bracket, UAV Arm studies

Note: Large iteration data (2_iterations/, best_design_archive/)
excluded via .gitignore - kept on local Gitea only.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-13 15:53:55 -05:00
parent 69c0d76b50
commit 73a7b9d9f1
1680 changed files with 144922 additions and 723 deletions

View File

@@ -1,4 +1,4 @@
import React, { useState, useEffect, useCallback, useMemo } from 'react';
import { useState, useEffect, useCallback, useMemo } from 'react';
import { useNavigate } from 'react-router-dom';
import {
Eye,
@@ -12,19 +12,15 @@ import {
Box,
AlertCircle,
CheckCircle,
Clock,
FileText,
Lightbulb,
Target,
Layers,
BookOpen,
ChevronRight,
ChevronDown,
Folder,
Play,
ExternalLink,
Zap,
List
List,
LucideIcon
} from 'lucide-react';
import { useStudy } from '../context/StudyContext';
import { Card } from '../components/common/Card';
@@ -74,7 +70,7 @@ interface InsightResult {
// ============================================================================
// Constants
// ============================================================================
const INSIGHT_ICONS: Record<string, React.ElementType> = {
const INSIGHT_ICONS: Record<string, LucideIcon> = {
zernike_wfe: Waves,
zernike_opd_comparison: Waves,
msf_zernike: Waves,
@@ -286,7 +282,7 @@ export default function Insights() {
return groups;
}, [availableInsights]);
const getIcon = (type: string) => INSIGHT_ICONS[type] || Eye;
const getIcon = (type: string): LucideIcon => INSIGHT_ICONS[type] || Eye;
const getColorClass = (type: string) => INSIGHT_COLORS[type] || 'text-gray-400 bg-gray-500/10 border-gray-500/30';
// ============================================================================