refactor(gui): split dashboard in core (GA) + strategy_crypto (paper)

- NEW src/multi_swarm_core/multi_swarm_core/dashboard/ con theme.py + data.py + nicegui_app.py
- theme.py condiviso (CSS + colors + _apply_theme + _json_to_html + _build_header parametrico)
- core GUI: pagine /, /convergence, /genomes — legge SOLO runs.db
- strategy GUI slim: solo /, legge SOLO strategy_crypto.db — importa theme dal core
- Aggiunto nicegui+plotly al core pyproject (uv.lock rigenerato)
- docker-compose: nuovo servizio multi-swarm-core-gui su /multi_swarm_core_gui
  (Traefik PathPrefix + replacepathregex, NO stripprefix per evitare doppio root_path)
- .env.example: DASHBOARD_ROOT_PATH ora per-servizio

Pattern: ogni modulo possiede la sua GUI, ogni GUI legge solo il proprio DB.
N strategie future = duplica lo scheletro strategy_crypto/frontend/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-05-15 19:23:12 +00:00
parent 436613bfde
commit a43157cd44
10 changed files with 1092 additions and 904 deletions
Generated
+4
View File
@@ -936,9 +936,11 @@ version = "0.1.0"
source = { editable = "src/multi_swarm_core" }
dependencies = [
{ name = "httpx" },
{ name = "nicegui" },
{ name = "numpy" },
{ name = "openai" },
{ name = "pandas" },
{ name = "plotly" },
{ name = "pyarrow" },
{ name = "pydantic" },
{ name = "pydantic-settings" },
@@ -953,9 +955,11 @@ dependencies = [
[package.metadata]
requires-dist = [
{ name = "httpx", specifier = ">=0.28" },
{ name = "nicegui", specifier = ">=3.11.1" },
{ name = "numpy", specifier = ">=2.1" },
{ name = "openai", specifier = ">=1.55" },
{ name = "pandas", specifier = ">=2.2" },
{ name = "plotly", specifier = ">=5.24" },
{ name = "pyarrow", specifier = ">=18.0" },
{ name = "pydantic", specifier = ">=2.9" },
{ name = "pydantic-settings", specifier = ">=2.6" },