Files
RichardandClaude Opus 5 dcc764dec1
CI / Build & Tests (Linux) (push) Canceled after 0s
CI / Plattformneutralität & Hygiene (push) Canceled after 0s
WebUI: Module, Analytics und Buchhaltung als eigene Ansichten
Das WebGUI konnte bisher Dashboard, Konten, Jobs, Logs und Einstellungen.
Die vier Strategie- und Analysemodule waren nur in der Avalonia-Oberflaeche
erreichbar - wer den Server aus der Ferne bediente, sah sie nicht.

Fuenf neue Endpunktgruppen holen sie herein:

  /api/analytics                  KPIs, Equity-Kurve, PnL je Modul und Tag,
                                  durchsuchbare Trade-Historie mit Seitenlauf
  /api/modules/copytrading        Master-Trader (CRUD), offene und
                                  geschlossene Trades, Risikolimits je Konto
  /api/modules/resolutionfarming  Scanner-Kandidaten, Positionen, Historie,
                                  Farming-Parameter je Konto
  /api/modules/supervisor         Profile, Agentenfragen, Berichtsarchiv,
                                  Signal-Dossiers, Counterfactuals
  /api/modules/accounting         BWA-Periodenabrechnung, Ledger-Journal,
                                  PDF- und CSV-Export, Ingest-Laeufe

Dazu im Bestand:
- Dashboard bekommt /overview-widgets: Modul-KPIs (heute/7T/30T), auffaellige
  Trades der letzten 24 Stunden, Warnungen und Fehler des Tages, den letzten
  Supervisor-Bericht.
- Die Kontenliste zeigt 3-Tage-PnL, Winrate, Gesamtergebnis und die
  beteiligten Module statt nur Salden.
- Jobs lassen sich ueber /toggle und /state ein- und ausschalten, nicht nur
  ausloesen.

Die Oberflaeche bleibt ohne Fremdbibliotheken: alle Diagramme sind Inline-SVG,
kein CDN, kein npm. Alle neuen Pfade liegen unter /api/ und damit hinter der
bestehenden Token-Pruefung.

Zwei Fehler nebenbei behoben:

- AccountingReportService.ResolveCurrency lief in eine NullReferenceException,
  wenn der FX-Dienst nicht gesetzt war. Betrifft jeden EUR-Aufruf ohne
  geladene EZB-Kurse.
- Ein Master-Trader, dessen Name ein Apostroph enthaelt, hatte einen toten
  Loeschen-Knopf: escapeHtml laesst ' unberuehrt, und im onclick-Attribut
  beendete das Zeichen das JavaScript-Literal vorzeitig. Laengerer Text mit
  Anfuehrungszeichen konnte darueber eigenen Code einschleusen. Neu setzt
  jsArg() den Wert als JSON-Literal ein; geprueft mit
  O'Brien "quote" <b>bold</b> \ backslash.

McpLightServerTests weicht jetzt aus, wenn HttpListener mangels URL-ACL nicht
binden darf, statt den Lauf scheitern zu lassen.

Geprueft auf der Linux-Test-VM (Ubuntu 26.04, .NET 10): Build ohne Fehler,
533 von 533 Tests bestanden, alle 11 Ansichten und 15 Unteransichten geladen,
alle Endpunkte mit 200 beantwortet, Schreibwege bis in die Datenbank
nachverfolgt, PDF- und CSV-Export gueltig, SSE-Logstrom live.

Offene Befunde aus der Abnahme liegen als #532 (Kopfleiste laeuft unter
1623 px ueber), #533 (EUR-PDF ohne EZB-Kurse liefert Nullbetraege) und #534
(Einstellungen melden Erfolg trotz gescheitertem Speichern) im Bugtracker.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 09:17:49 +02:00

90 lines
6.6 KiB
Markdown

# PolyTrader WebUI — Gesamtdokumentation & Architekturübersicht
## 1. Architektur & Hosting
Das WebInterface ist als eigenständiges Projekt [`PolyTrader.Web`](file:///j:/Softwareprojekte/PolytraderSharp/PolyTraderSharp/src/PolyTrader.Web/) konzipiert und wird über ASP.NET Core Kestrel auf dem Server gehostet.
- **Frontend**: Vanilla HTML5, CSS3 und modernes JavaScript (ES6+), vollständig autark ohne externe CDN-Bibliotheken (kein React, Vue, npm oder Drittanbieter-CDNs). Alle Visualisierungen (Equity-Kurve, Säulendiagramme, Donut-/Balkendiagramme) basieren auf dynamischem, responsivem Inline-SVG.
- **Backend**: ASP.NET Core Minimal APIs mit strukturierter Dependency Injection in die PolyTrader-Kern- und Modul-Services (`PolyTrader.Core`, `PolyTrader.Modules.CopyTrading`, `PolyTrader.Modules.ResolutionFarming`, `PolyTrader.Modules.Supervisor`, `PolyTrader.Modules.Accounting`).
- **Sicherheit & Auth**: Header-basierte Bearer-Token-Authentifizierung (`Authorization: Bearer <token>`) bzw. Auth-Cookie für Browser-Sessions. Automatischer Redirect auf `/login` bei ungültigen Anfragen.
---
## 2. Navigationsstruktur & Module
| Ansicht | Pfad / ID | Funktionalitäten |
|---|---|---|
| **Dashboard** | `#view-dashboard` | Globale PnL, USDC-Salden, Portfolio-Wert, Notfall-Pause, Modul-KPI-Kacheln, Notable Trades (24h), Account-Übersicht (3d PnL, Winrate, Overall PnL) |
| **Analytics** | `#view-analytics` | KPI-Cards (Trades, Winrate, Profit-Faktor, Max Drawdown, Net PnL), Pure-SVG Equity Curve, Modul-PnL-Chart, Daily PnL Bar Chart, paginierte Trade-Historie mit Volltextsuche & Filterung |
| **CopyTrading** | `#view-copytrading` | Master-Trader-Verwaltung (CRUD via Modal), Offene Positionen mit Buchgewinn ($/%) & Status, Geschlossene Trades (Paginierung & Suche), Account-spezifische Risikolimits & Eskalationsparameter |
| **Resolution Farming** | `#view-resolutionfarming` | Account-Wahlschalter, Scanner-Kandidaten (Ask, Fee, Net-Edge, Score, Status), Offene Farming-Positionen, Trade-Historie, Account-Farming-Parameter (Cluster-Limits, Whitelist/Blacklist) |
| **Supervisor** | `#view-supervisor` | AI Copilot Chat (Profile: Allgemein, Technik, CopyTrading, ResolutionFarming; Schnellabfrage-Presets; Tool-Invocations mit Parametern; Token-Zähler), Archivierte Berichte (Volltext-Modal), Signal-Dossiers (Markdown-Inspektor), Counterfactuals |
| **Accounting** | `#view-accounting` | BWA-Periodenabrechnung (Anfangs-/Endbestand, Handelsvolumen, Cashflows, Gebühren, Netto-Ergebnis), Währungswahl (USDC/USD/EUR via EZB-Kurse), PDF-Export (MigraDoc Stream), CSV-Export, Ledger-Journal (Suche & Paginierung), Sync & Ingest Historie |
| **Konten** | `#view-accounts` | Konfigurierte Polymarket-Konten, Wallet-Adressen, Demo/Live-Status, Links zu Polymarket-Profilen |
| **Jobs** | `#view-jobs` | Hintergrund-Jobs (Scheduler), Status, Intervall, Letzter Lauf, Nächster Lauf, Sofortausführung (Run Now), Live-Toggle (Aktivieren/Deaktivieren) |
| **Terminal / Logs** | `#view-logs` | Echtzeit-Logstream via Server-Sent Events (SSE), Auto-Scroll, Log-Level-Filter (Info, Warning, Error, Trade), Leeren |
| **Module** | `#view-modules` | Strategie- und Analyse-Modulübersicht mit Direkt-Startknöpfen in die Fachansichten |
| **Einstellungen** | `#view-settings` | Server-Port, Lokaler Zugriff vs. LAN/VPN, Token-Anzeige, Token-Kopieren & Neugenerierung |
---
## 3. Endpunkt-Übersicht (Minimal APIs)
### Authentifizierung & Settings
- `POST /api/auth/login`: Authentifizierung via Token, Setzen des Auth-Cookies
- `POST /api/auth/logout`: Löschen des Auth-Cookies
- `GET /api/settings/webui`: Aktuelle Servereinstellungen
- `POST /api/settings/webui`: Speichern der Servereinstellungen in `appsettings.Local.json`
- `POST /api/settings/webui/generate-token`: Generierung eines kryptografisch sicheren Tokens
### Dashboard & Konten & Jobs
- `GET /api/dashboard/summary`: Globale KPIs, Handelsmodi, Watchdog-/Alchemy-/VPN-Status
- `GET /api/dashboard/overview-widgets`: Modul-KPIs und notable Trades
- `POST /api/dashboard/trading-mode`: Umschalten von Live/Demo/Pause
- `GET /api/accounts`: Liste aller Konten mit Performance-Metriken
- `GET /api/jobs`: Liste aller Scheduler-Jobs
- `POST /api/jobs/{name}/toggle`: Job aktivieren / deaktivieren
- `POST /api/jobs/{name}/run`: Job sofort anstoßen
### Analytics
- `GET /api/analytics/kpis`: Aggregierte Kennzahlen (Winrate, Profit-Faktor, Drawdown)
- `GET /api/analytics/charts`: Zeitreihendaten für SVG-Equity-Kurve, Modul-Aufteilung und Tages-PnL
- `GET /api/analytics/trades`: Paginierte, durchsuchbare Trade-Historie
### CopyTrading
- `GET /api/modules/copytrading/traders`: Alle Master-Trader
- `POST /api/modules/copytrading/traders`: Anlegen / Bearbeiten von Master-Tradern
- `DELETE /api/modules/copytrading/traders/{id}`: Löschen eines Master-Traders
- `GET /api/modules/copytrading/open-trades`: Offene Positionen mit Buchgewinn
- `GET /api/modules/copytrading/closed-trades`: Geschlossene Trades mit Filterung
- `GET /api/modules/copytrading/settings/{accountId}`: Risikolimits des Kontos
- `POST /api/modules/copytrading/settings/{accountId}`: Speichern der Risikolimits
### Resolution Farming
- `GET /api/modules/resolutionfarming/candidates`: Scanner-Kandidaten
- `GET /api/modules/resolutionfarming/positions`: Offene Farming-Positionen
- `GET /api/modules/resolutionfarming/history`: Abgeschlossene Trades
- `GET /api/modules/resolutionfarming/settings/{accountId}`: Farming-Parameter
- `POST /api/modules/resolutionfarming/settings/{accountId}`: Speichern der Parameter
### Supervisor
- `GET /api/modules/supervisor/profiles`: Verfügbare Rollen-Profile
- `POST /api/modules/supervisor/ask`: Interaktiver Chat mit LLM-Agent & Tool-Execution
- `GET /api/modules/supervisor/reports`: Archivierte Berichte
- `GET /api/modules/supervisor/reports/{id}`: Detailbericht
- `GET /api/modules/supervisor/dossiers`: Signal-Historie
- `GET /api/modules/supervisor/dossiers/{signalId}`: Trade-Dossier Markdown
- `GET /api/modules/supervisor/counterfactuals`: Realitäts-Abgleich abgelehnter Trades
### Accounting & BWA
- `GET /api/modules/accounting/statement`: Periodenabrechnung mit FX-Faktor (USDC/USD/EUR)
- `GET /api/modules/accounting/export/pdf`: Binärer PDF-Download der Periodenabrechnung
- `GET /api/modules/accounting/export/csv`: Binärer CSV-Download des Ledgers
- `GET /api/modules/accounting/ledger`: Paginiertes Transaktionsjournal
- `GET /api/modules/accounting/runs`: Ingestion-Läufe & Saldendifferenz
- `POST /api/modules/accounting/ingest`: Starten eines Blockchain-Syncs
### Terminal & Module
- `GET /api/logs`: Statischer Abruf vergangener Logs
- `GET /api/logs/stream`: SSE-Log-Stream
- `GET /api/modules`: Liste aller Strategie- und Analyse-Module