diff --git a/PR_REVIEW.md b/PR_REVIEW.md new file mode 100644 index 0000000..ed63c91 --- /dev/null +++ b/PR_REVIEW.md @@ -0,0 +1,38 @@ +# PR Review (work vs main baseline) + +> Note: The repository currently has no `main` branch ref locally, so this review uses `f363df5` ("Initialize repository") as the effective baseline for the current branch changes. + +## Agent 1 — Security issue +- **Result:** No direct secret exposure or dangerous execution pattern found in changed files. +- **Observation:** CI workflow currently executes only static `echo` statements and uses `actions/checkout@v4`, which is a pinned major tag and generally acceptable baseline hygiene. +- **Risk:** Low. + +## Agent 2 — Code quality +- **Result:** Acceptable for scaffolding, but CI workflow remains template-level and does not perform quality checks. +- **Observation:** `.github/workflows/blank.yml` is still a starter template and lacks lint/test/build steps. +- **Risk:** Medium (quality regressions can slip through). + +## Agent 3 — Bugs +- **Result:** Functional bug risk identified in CI trigger configuration. +- **Observation:** Workflow triggers only on `main`, but this repository currently has only `work`. This means CI may not run on normal pushes/PRs from the active branch naming state. +- **Risk:** Medium. + +## Agent 4 — Race +- **Result:** No race/concurrency bug identified. +- **Observation:** Single job workflow with sequential steps and no shared mutable state. +- **Risk:** Low. + +## Agent 5 — Test flakiness +- **Result:** No flaky tests detected because no tests are currently executed. +- **Observation:** Absence of tests is itself a reliability gap. +- **Risk:** Medium (unknown behavior remains unvalidated). + +## Agent 6 — Maintainability of the code +- **Result:** Documentation clarity is good for positioning, but operational maintainability is limited by missing engineering scaffolding. +- **Observation:** README communicates principles and scope well; however, repository lacks contribution/development/testing conventions and actionable CI checks. +- **Risk:** Medium. + +## Recommended follow-ups +1. Align workflow triggers with actual branch strategy (e.g., `work` and/or wildcard + protected branch policy). +2. Add real CI stages (lint, test, build) and fail-fast defaults. +3. Introduce minimal test harness and a contributor/developer guide. diff --git a/README.md b/README.md index add517a..c079924 100644 --- a/README.md +++ b/README.md @@ -65,3 +65,11 @@ Ich arbeite an der Schnittstelle von: **Operator Fischer** Executive System Architect / High-Performance KI-Operator + +## Agenten (neu) + +Die von dir gewünschte Agenten-Pipeline wurde als Scaffold hinzugefügt: +- `agents/registry.yml` +- `agents/prompts/*.md` + +Startpunkt: `agents/README.md` diff --git a/agents/README.md b/agents/README.md new file mode 100644 index 0000000..401e1d7 --- /dev/null +++ b/agents/README.md @@ -0,0 +1,18 @@ +# Agenten-Setup (aus deiner Architektur) + +Diese Struktur bildet genau die von dir gezeigte Pipeline ab: + +1. **Market Data Feed** + **News Scraper** + **Sentiment Analyzer** +2. ➜ **Core Engine** +3. ➜ **Pattern Matcher (Oktagon-Logik)** +4. ➜ **Signal Generator (Muster → Gegenmuster)** +5. ➜ **Live Dashboard (Streamlit/React)** +6. ➜ **Watchlists**, **News-Block pro Aktie**, **Alert Layer** + +## Enthalten +- `agents/registry.yml`: Zentrale Agenten-Definition (Rollen, Inputs/Outputs, Handoffs) +- `agents/prompts/*.md`: Prompt-Vorlagen je Agent für schnelle Implementierung + +## Nächster Schritt +- Diese Agenten als echte Worker/Services anbinden (z. B. Python + Queue/Orchestrator), + wobei `registry.yml` als Single Source of Truth dient. diff --git a/agents/prompts/alert_layer.md b/agents/prompts/alert_layer.md new file mode 100644 index 0000000..b913a51 --- /dev/null +++ b/agents/prompts/alert_layer.md @@ -0,0 +1,7 @@ +# Alert Layer Agent Prompt + +Du bist der Alert-Layer-Agent. +- Versende Alerts nur bei kritischen/hochpriorisierten Signalen. +- Kanäle: E-Mail, Slack, Webhook. +- Verhindere Alert-Spam durch Deduplikation und Cooldown. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/core_engine.md b/agents/prompts/core_engine.md new file mode 100644 index 0000000..f0e6486 --- /dev/null +++ b/agents/prompts/core_engine.md @@ -0,0 +1,7 @@ +# Core Engine Agent Prompt + +Du bist der Core-Engine-Agent. +- Führe Market, News und Sentiment je Ticker/Zeitscheibe zusammen. +- Berechne konsistente Features inkl. Datenqualität. +- Ausgabeformat: `fused_feature_frame` pro Ticker. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/live_dashboard.md b/agents/prompts/live_dashboard.md new file mode 100644 index 0000000..76a8149 --- /dev/null +++ b/agents/prompts/live_dashboard.md @@ -0,0 +1,7 @@ +# Live Dashboard Agent Prompt + +Du bist der Dashboard-Agent. +- Erzeuge ein UI-View-Model für Streamlit/React. +- Zeige je Ticker: aktuelles Signal, Konfidenz, letzte News, Sentiment. +- Strukturiere Daten für Watchlist, News-Block und Alerts. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/market_data_feed.md b/agents/prompts/market_data_feed.md new file mode 100644 index 0000000..42532ff --- /dev/null +++ b/agents/prompts/market_data_feed.md @@ -0,0 +1,7 @@ +# Market Data Feed Agent Prompt + +Du bist der Market-Data-Agent. +- Hole Kursdaten für alle Ticker aus der Watchlist. +- Normalisiere Felder (`ticker`, `timestamp`, `open`, `high`, `low`, `close`, `volume`, `source`). +- Markiere fehlende Werte und Datenlatenz. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/news_block.md b/agents/prompts/news_block.md new file mode 100644 index 0000000..eae52cc --- /dev/null +++ b/agents/prompts/news_block.md @@ -0,0 +1,7 @@ +# News-Block Agent Prompt + +Du bist der News-Block-Agent. +- Rendere je Aktie die wichtigsten Nachrichten nach Relevanz und Aktualität. +- Ergänze Sentiment-Kurzlabel pro Nachricht. +- Begrenze auf die Top-Einträge pro Ticker. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/news_scraper.md b/agents/prompts/news_scraper.md new file mode 100644 index 0000000..8756c3d --- /dev/null +++ b/agents/prompts/news_scraper.md @@ -0,0 +1,7 @@ +# News Scraper Agent Prompt + +Du bist der News-Scraper-Agent. +- Sammle Nachrichten pro Ticker aus NewsAPI/RSS/GNews. +- Dedupliziere nach URL/Titel-Ähnlichkeit. +- Normalisiere Felder (`ticker`, `timestamp`, `title`, `summary`, `url`, `source`). +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/pattern_matcher.md b/agents/prompts/pattern_matcher.md new file mode 100644 index 0000000..b85d62b --- /dev/null +++ b/agents/prompts/pattern_matcher.md @@ -0,0 +1,7 @@ +# Pattern Matcher Agent Prompt + +Du bist der Pattern-Matcher-Agent (Oktagon-Logik). +- Erkenne Muster und Gegenmuster aus `fused_feature_frame`. +- Gib je Ereignis aus: `pattern_id`, `ticker`, `strength`, `direction`, `explanation`. +- Markiere Konflikte zwischen Pattern und Gegenmuster. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/sentiment_analyzer.md b/agents/prompts/sentiment_analyzer.md new file mode 100644 index 0000000..571d8b5 --- /dev/null +++ b/agents/prompts/sentiment_analyzer.md @@ -0,0 +1,7 @@ +# Sentiment Analyzer Agent Prompt + +Du bist der Sentiment-Agent. +- Analysiere jede News auf Sentiment und Unsicherheit. +- Felder: `sentiment_score` (-1..1), `confidence` (0..1), `reasoning_short`. +- Achte auf widersprüchliche Signale. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/signal_generator.md b/agents/prompts/signal_generator.md new file mode 100644 index 0000000..72f858d --- /dev/null +++ b/agents/prompts/signal_generator.md @@ -0,0 +1,7 @@ +# Signal Generator Agent Prompt + +Du bist der Signal-Generator-Agent. +- Erzeuge aus Pattern-Events handelbare Signale. +- Pflichtfelder: `ticker`, `signal` (buy/sell/hold), `confidence`, `risk_note`, `rationale`. +- Priorisiere Signale nach Robustheit und Risiko. +- Gib nur JSON-Objekte zurück. diff --git a/agents/prompts/watchlists.md b/agents/prompts/watchlists.md new file mode 100644 index 0000000..80fea04 --- /dev/null +++ b/agents/prompts/watchlists.md @@ -0,0 +1,7 @@ +# Watchlist Agent Prompt + +Du bist der Watchlist-Agent. +- Verwalte Nutzer-Watchlists mit Priorität. +- Ergänze/entferne Ticker deterministisch und nachvollziehbar. +- Liefere diff-basierte Änderungen. +- Gib nur JSON-Objekte zurück. diff --git a/agents/registry.yml b/agents/registry.yml new file mode 100644 index 0000000..24f9b5e --- /dev/null +++ b/agents/registry.yml @@ -0,0 +1,123 @@ +version: 1 +system: stock-signal-multi-agent +language: de +agents: + - id: market_data_feed + name: Market Data Feed Agent + role: Holt Kurs-, Volumen- und Basis-Metadaten für beobachtete Ticker. + inputs: + - watchlist_tickers + - timeframe + outputs: + - normalized_market_snapshots + providers: + - yahoo_finance + - alpha_vantage + handoff_to: + - core_engine + + - id: news_scraper + name: News Scraper Agent + role: Sammelt, dedupliziert und normalisiert Finanznachrichten je Aktie. + inputs: + - watchlist_tickers + - time_window + outputs: + - normalized_news_items + providers: + - newsapi + - rss + - gnews + handoff_to: + - core_engine + + - id: sentiment_analyzer + name: Sentiment Analyzer Agent + role: Bewertet News-Sentiment und Unsicherheitssignale. + inputs: + - normalized_news_items + outputs: + - sentiment_scores + providers: + - nltk + - transformers + handoff_to: + - core_engine + + - id: core_engine + name: Core Engine Agent + role: Führt Markt-, News- und Sentimentdaten zu einem einheitlichen Feature-Objekt zusammen. + inputs: + - normalized_market_snapshots + - normalized_news_items + - sentiment_scores + outputs: + - fused_feature_frames + handoff_to: + - pattern_matcher + + - id: pattern_matcher + name: Pattern Matcher Agent + role: Ermittelt Oktagon-Logik-Pattern (Muster/Gegenmuster) aus Feature-Frames. + inputs: + - fused_feature_frames + outputs: + - pattern_events + - anti_pattern_events + handoff_to: + - signal_generator + + - id: signal_generator + name: Signal Generator Agent + role: Erzeugt handelbare Signale mit Begründung, Konfidenz und Risiko-Hinweis. + inputs: + - pattern_events + - anti_pattern_events + outputs: + - ranked_signals + handoff_to: + - live_dashboard + + - id: live_dashboard + name: Live Dashboard Agent + role: Rendert Signale, News-Block und Status für UI (Streamlit/React). + inputs: + - ranked_signals + - normalized_news_items + outputs: + - dashboard_view_model + channels: + - streamlit + - react + handoff_to: + - watchlists + - news_block + - alert_layer + + - id: watchlists + name: Watchlist Agent + role: Verwaltet beobachtete Ticker, Priorisierung und Nutzerlisten. + inputs: + - dashboard_view_model + outputs: + - watchlist_state + + - id: news_block + name: News-Block Agent + role: Zeigt pro Aktie gefilterte, priorisierte News mit Sentiment-Kontext. + inputs: + - dashboard_view_model + outputs: + - per_ticker_news_panels + + - id: alert_layer + name: Alert Layer Agent + role: Versendet Alerts für kritische Signale und Statuswechsel. + inputs: + - dashboard_view_model + outputs: + - delivered_alerts + channels: + - email + - slack + - webhook