Funk-lab/admin/ia/finlab.md
ALI YESILKAYA 56cb32eacc
feat(finlab): dashboard web (graphiques/portefeuille/actions) + fix seed NFS (#65)
Ajoute une interface graphique à finlab, en plus de la console Claude Code (les
deux cohabitent sur finance.lab.local) :

- dashboard/ : backend FastAPI (sans LLM/clé) exposant les données finlab en JSON
  (/api/portfolio, /api/scan, /api/ohlc, /api/plan, /api/alerts) + front statique
  (lightweight-charts) : graphiques chandeliers MM50/200 + volume, portefeuille
  (P&L/poids/secteurs), watchlists thématiques scannées, alertes, plan de trade R:R
- Découplage code/data : finlab lit ses configs depuis FINLAB_HOME si défini
  (workspace persistant) ; repli sur le dossier du package en dév local
- Image double usage (un build, deux conteneurs) : code → /opt/app, seed minimal
  (configs + persona + MCP) → workspace
- Fix seed NFS (cause racine du workspace vide) : WORKDIR n'est plus sur le volume
  (le runtime le créait en root sur NFS) ; seed déplacé dans un initContainer
  robuste (recrée le dossier s'il est non-inscriptible)
- Deployment : initContainer seed + 2 conteneurs (console ttyd -b /console, dashboard
  uvicorn) ; Service 2 ports ; IngressRoute 2 routes (/console + dashboard), basicAuth

Validé en local (podman) : seed OK, dashboard /api/portfolio → 16k€/10 positions
via FINLAB_HOME, endpoints ohlc/scan/plan/alerts OK, ttyd/claude/finlab présents.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:57:23 +02:00

4 KiB

FinLab — dashboard finance + console Claude Code + toolkit d'analyse

Quoi : boîte à outils d'analyse de marché maison (finlab, données Yahoo Finance gratuites) déployée in-cluster sous deux faces (une seule image) : un dashboard web (graphiques, portefeuille, watchlists, actions) et une console Claude Code finance. Remplace l'approche OpenAlice abandonnée (cf. admin/ia/openalice.md) par plus simple et plus puissant : ton vrai Claude Code (sur ton abonnement, pas l'API au compteur) + une UI graphique gratuite.

  • Dashboard (finance.lab.local/) — graphiques chandeliers (MM50/200 + volume), portefeuille (P&L/poids/secteurs), watchlists thématiques scannées, alertes du jour, plan de trade R:R. FastAPI dashboard/server.py, aucun LLM/clé (analyse technique pure).
  • Console (finance.lab.local/console/) — terminal web (ttyd) → claude agentique, persona + outils finlab en MCP, login abonnement persisté.

:

  • Source : tools/finlab/ (code finlab + Dockerfile + persona workspace/CLAUDE.md).
  • Image : CI .github/workflows/build-finlab.ymlghcr.io/alkatrazz24/funk-finlab.
  • Déploiement : ns ai, finance.lab.local, manifests k8s/apps/finlab/, app ArgoCD k8s/apps-of-apps/apps/finlab.yaml.
  • MCP local : .mcp.json (racine repo lab) → outils finlab dans les sessions Claude Code du lab.

Cadre : analyse/aide à la décision uniquement, aucun ordre réel (seul le paper trading Alpaca fictif est exécutable). Persona dans tools/finlab/workspace/CLAUDE.md (profil swing trader concentré tech/semis, philosophie R:R/concentration/discipline).

Architecture

Composant Détail
initContainer seed Peuple le workspace (cp -rn), robuste au piège NFS (fsGroup non honoré → recrée le dossier s'il est root/non-inscriptible). Tourne avant les conteneurs
container dashboard uvicorn dashboard.server:app :8800 — UI + API JSON finlab
container console ttyd -b /console :7681 → claude dans le workspace
Cerveau (console) Abonnement Claude Code (login OAuth persisté dans ~/.claude sur le PVC) — pas de clé API
Code vs data Code (finlab + dashboard) dans l'image /opt/app (maj avec l'image) ; configs éditables via FINLAB_HOME=/home/finlab/workspace (PVC)
PVC finlab-data 5Gi NFS → /home/finlab : login + workspace (configs + .cache)
Auth basicAuth Traefik (finlab-auth) sur les deux routes — un shell web ne s'expose pas nu
Routes /console → 7681 · reste → 8800

Découplage code/data : finlab lit ses configs depuis FINLAB_HOME si défini (sinon repli sur le dossier du package → dév local inchangé). Le workspace est seedé au 1er boot puis vit sur le PVC (edits + login persistent ; une nouvelle image n'ajoute que les fichiers manquants).

Outils finlab

digest (vue d'ensemble compacte, à privilégier), portfolio_summary, opportunities/scan, technical_analysis/tech (RSI/MACD/MM50-200/Bollinger/ATR), fundamentals (PER/PEG/ROE/dette/ cible), trade_plan/plan (entrée/stop ATR/objectifs/taille/R:R), alerts_today, price, plus paper trading (paper_account/paper_positions/paper_order, clés Alpaca optionnelles).

Configs (workspace, éditables) : portfolio.yaml (positions Revolut), watchlists.yaml (thèmes chaîne IA/datacenter), alerts.yaml (règles).

Onboarding (premier boot)

Checklist détaillée : k8s/apps/finlab/README.md.

  1. Secrets manuels dans ai : ghcr-pull (pull GHCR) + finlab-auth (htpasswd basicAuth).
  2. Ouvrir finance.lab.localclaude/login (abonnement, persisté sur le PVC).

Accès programmatique

  • MCP dans le repo lab : .mcp.json racine pointe tools/finlab/.venv → outils finlab dans les sessions Claude Code du lab (approbation MCP au 1er lancement).
  • Headless : kubectl -n ai exec deploy/finlab -- python -m finlab.cli digest.

Liens

  • Source historique : ex-projet Projets/Finance (rapatrié ici).
  • Approche précédente abandonnée : admin/ia/openalice.md.