feat: open-source release — AI-driven autonomous optimization with live visibility

Major upgrade making the AI loop visible and the project ready for public release.

UI / UX
- Live AI Thinking Feed: streams reasoning, decisions, and outcomes per iteration
- Parameter Changes panel: prev → new + reason for every AI-driven edit
- Validation Activity panel: out-of-sample + sensitivity runs with live metrics
- Early Termination banner: surfaces why optimization stopped (targets met, no profit, budget, stuck, user stop)
- 3-phase tracker renamed Exploration / Iteration / Validation with live N/total
- Best Result modal exposes Evolution Path showing how the AI arrived at the winner
- Run-detail modal accessible from every recent run row
- Setup form validation (dates, walk-forward order, params selection, AI targets)
- Pause button removed; misleading sidebar nav consolidated to Dashboard / New Run / Reports / Source

Backend
- AIGuidedLoop streams ai_thinking, param_changes, ai_targets_met, ai_stuck
- Pipeline emits validation_start / validation_run_start / validation_run_complete / validation_done
- Pipeline emits early_termination on every early-stop path
- /api/best_result returns best run + full evolution chain
- /api/run/<id> + /api/runs sorted by ts
- AIReasoner falls back to ANTHROPIC_API_KEY env var when config is a placeholder
- Demo mode (APEX_DEMO_MODE=1) generates deterministic synthetic backtests so judges can run end-to-end without MT5

Open-source readiness
- README.md with pitch, demo flow, architecture diagram, quickstart, event reference
- LICENSE (MIT)
- config.example.yaml template (config.yaml now git-ignored)
- requirements.txt: added anthropic / requests / psutil / beautifulsoup4, capped majors
- .gitignore: secrets, *.set, scratch screenshots, ea_registry.yaml
- demo/run_demo.py: one-command offline demo runner
- 10 polished screenshots for README + judge review
This commit is contained in:
LEGSTECH Optimizer
2026-04-25 11:39:17 +00:00
parent e5dd9550b7
commit 6caafdb794
31 changed files with 7546 additions and 1113 deletions
+107
View File
@@ -324,3 +324,110 @@ body {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
/* ── AI Insight Panel ─────────────────────────────────────────────────────── */
.ai-insight-card {
border: 1px solid rgba(0, 212, 170, 0.25);
background: linear-gradient(135deg, rgba(0,212,170,0.04) 0%, rgba(124,109,250,0.04) 100%);
animation: slideIn 0.4s ease both;
}
.ai-confidence-badge {
font-size: 0.72rem;
font-weight: 600;
padding: 0.2rem 0.7rem;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.ai-confidence-badge.high { background: rgba(0,212,170,0.15); color: #00d4aa; }
.ai-confidence-badge.medium { background: rgba(251,191,36,0.15); color: #fbbf24; }
.ai-confidence-badge.low { background: rgba(100,116,139,0.15); color: #94a3b8; }
.ai-confidence-badge.analyzing { background: rgba(124,109,250,0.15); color: #7c6dfa; }
.ai-headline {
font-size: 1.05rem;
font-weight: 700;
color: #e2e8f0;
margin: 0.75rem 0 0.5rem;
line-height: 1.4;
}
.ai-diagnosis {
font-size: 0.875rem;
color: #94a3b8;
line-height: 1.7;
margin-bottom: 1rem;
}
.ai-sections {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.ai-section {
background: rgba(255,255,255,0.03);
border: 1px solid rgba(255,255,255,0.06);
border-radius: 10px;
padding: 0.85rem 1rem;
}
.ai-section-label {
font-size: 0.72rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
color: #64748b;
margin-bottom: 0.6rem;
}
.ai-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.ai-list li {
font-size: 0.83rem;
color: #cbd5e1;
padding-left: 1.1rem;
position: relative;
line-height: 1.5;
}
.ai-list li::before {
content: "→";
position: absolute;
left: 0;
color: #00d4aa;
font-size: 0.75rem;
}
.ai-list-warn li::before { color: #fbbf24; content: "⚠"; }
.ai-suggestions {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.ai-suggestion-row {
display: grid;
grid-template-columns: 180px 80px 80px 1fr;
align-items: center;
gap: 0.75rem;
font-size: 0.82rem;
padding: 0.4rem 0.5rem;
border-radius: 6px;
background: rgba(255,255,255,0.02);
}
.ai-param-name {
font-family: 'JetBrains Mono', monospace;
font-size: 0.78rem;
color: #7c6dfa;
}
.ai-param-from { color: #64748b; text-align: center; }
.ai-param-to {
color: #00d4aa;
font-weight: 600;
text-align: center;
}
.ai-param-reason {
color: #94a3b8;
font-size: 0.78rem;
line-height: 1.4;
}