Commit Graph

125 Commits

Author SHA1 Message Date
Hermes Agent 30433806cc docs: NanoBanana Skill — echte API-Response-Felder (successFlag, resultImageUrl) + Cloudflare-Workaround
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 13m35s
2026-06-22 22:27:04 +02:00
Hermes Agent 31687f7e44 docs: NanoBanana Skill — 1920×1080 @ 72 DPI Standard + Post-Processing
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 11m32s
2026-06-22 22:24:07 +02:00
Hermes Agent 6bcdb20683 docs: NanoBanana Image Gen Skill für BSN-Artikel-Bilder
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 12m55s
2026-06-22 22:22:44 +02:00
Hermes Agent 72803b9aa5 docs: Installationsanleitung bsn-secrets für Alicia-Rechner
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 5s
2026-06-22 18:17:33 +02:00
Hermes Agent 8f51b8c17c feat: bsn-secrets — GPG-verschlüsselter Secrets Manager für alle BSN-Agenten
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 11m55s
- Ersetzt fragiles /tmp/cody-gitea-token durch persistente GPG-Verschlüsselung
- Symmetrische GPG-Verschlüsselung (kein Key-Management nötig)
- Kommandos: set, get, list, delete
- Passphrase aus BSN_SECRETS_PASSPHRASE (Hermes .env)
- Skills (alicia-gitea-workflow, article-management) auf bsn-secrets umgestellt
- .gitignore: *.gpg und password-store/ ausgeschlossen
- Verhindert Token-Verlust durch /tmp-Löschung bei Reboots
2026-06-22 18:13:44 +02:00
Alicia (BSN) bf16015d5c feat: Input-Validatoren für Telefon, Spielname, Spieleranzahl
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 14m57s
2026-06-21 23:20:43 +00:00
Alicia (BSN) e43909b0cd feat: Submission-Pydantic-Modell mit Validierung
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 10m18s
2026-06-21 23:05:21 +00:00
Alicia (BSN) 15667c9e49 chore: pre-commit hooks mit Ruff Lint + Format
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 11m39s
2026-06-21 23:04:01 +00:00
Alicia (BSN) b5a5847b26 chore: pyproject.toml mit Ruff, mypy, pytest-Konfiguration
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 12m11s
2026-06-21 22:58:29 +00:00
Hermes Agent 0901a4b99a style: Ruff-Formatierung auf Alicias Empfehlungs-Engine
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 12m52s
2026-06-22 00:22:46 +02:00
Alicia (BSN) 0a8f5f62f3 feat: Spiele-Empfehlungs-Engine mit Scoring-Algorithmus
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 11m56s
2026-06-21 22:13:37 +00:00
Hermes Agent 567cf7e63d docs: BSN Live-System-Plan — 5-Phasen-Setup von Tag 1
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 14m16s
2026-06-22 00:00:17 +02:00
Hermes Agent a5eb0e7d27 feat: sys-2 Edge-Queue — Signatur-Prüfung, Dedup, asynchrone Verarbeitung
Quality Gate / 🛡️ Lint + Type Check + Tests (push) Failing after 11m21s
- webhook_queue.py: WhatsApp X-Hub-Signature-256 + Telegram Webhook-Intake
- queue_handler.py: SQLite-basierte Queue mit Idempotenz (UNIQUE message_id)
- queue_worker.py: Asynchroner Worker für GPU-Verarbeitung
- app.py: Webhooks umgebaut → sofort 200 OK, Worker verarbeitet später
- Redis 8.0 läuft als Infrastruktur (Queue ist SQLite für Persistenz)
2026-06-21 23:59:17 +02:00
Hermes Agent 5bad339558 docs: Harter Test für Alicia — Spiele-Empfehlungs-Engine 2026-06-21 23:53:41 +02:00
Alicia (BSN) 2d4ccdc971 feat: Spiel-Bewertungs-Utility mit Tests 2026-06-21 21:50:38 +00:00
Hermes Agent eebf21a8fc feat: BSN Hermes Onboarding-Script für lokale Installation 2026-06-21 23:25:17 +02:00
Hermes Agent cd2dc93611 docs: Agenten-Testaufgabe für Coding-Standards-Verifikation 2026-06-21 22:30:40 +02:00
Hermes Agent fc8846d919 docs: AUTO-Badge in §8 korrigiert — Coverage läuft in CI, nicht pre-commit 2026-06-21 22:21:22 +02:00
Hermes Agent 5555e092d4 docs: 2. Review-Runde — UP045, Coverage-Label, mypy-2.1-Warnung, CI-Pfad 2026-06-21 22:15:14 +02:00
Hermes Agent 4bec0e13ca docs: System- & Prozess-Standards TODO (externes Review, 9 Items) 2026-06-21 22:02:22 +02:00
Hermes Agent f0bd2570b3 docs: Coding Standards nach externem Review korrigiert (6 Fixes) 2026-06-21 21:57:54 +02:00
Hermes Agent b1a74b7d02 docs: Coding Standards Fundament — Regelwerk + Implementierungsplan 2026-06-21 21:36:17 +02:00
Hermes Agent 20a7f5987a feat: Kickstarter LIVE-Daten via FlareSolverr — DURCHBRUCH!
Stage 0: FlareSolverr (Headless Chromium, localhost:8191)
  - Löst Cloudflare-Challenge automatisch
  - Extrahiert Campaign-Daten aus embedded Flat-JSON:
    project_name, project_backers_count, project_pledged_usd,
    project_goal_usd, project_state, project_deadline, project_blurb

Getestet: Earthborne Trailblazer → 49,130 / 3,969 backers / successful
  Kein Proxy nötig — FlareSolverr's Chromium reicht!

Setup: FlareSolverr in ~/workspace/FlareSolverr/
  Start: cd src && python start_flaresolverr.py
  Patch: --headless=new statt Xvfb (utils.py)

Kickstarter-Fetcher jetzt: 2 Stages (FlareSolverr → Slug-Fallback)
2026-06-21 19:39:41 +02:00
Hermes Agent 59b67fa79a feat: Kickstarter-Fetcher — 5-Stufen-Fallback (getestet & dokumentiert)
Tests 2026-06-20:
  Stage 1: Playwright+iproyal →  HTTP 403 (Proxy von KS erkannt)
  Stage 2: Tavily Extract →  Failed to fetch
  Stage 3: Wayback Machine →  Titel (Filter für non-403 Snapshots)
  Stage 4: Google Cache → ⚠️ EU-Cookie-Wall
  Stage 5: Press/Titel →  URL-Slug

PROXY_ENABLED=False, TAVILY_ENABLED=True (Flags für spätere Aktivierung)
  Option A: Bright Data/Oxylabs Web Unlocker
  Option B: Kicktraq API
  Option C: Manuelle Recherche
2026-06-21 19:25:14 +02:00
Hermes Agent 05b889023e docs: Kickstarter-Fetcher Plan — 5-Stufen-Fallback für zuverlässigen Zugriff
Problem: Kickstarter blockiert via Cloudflare ALLE Endpunkte
Lösung: kickstarter_fetcher.py mit Fallback-Kette:
  1. Playwright Headless Browser (via Proxy) — Live-Daten
  2. Tavily Extract API
  3. Wayback Machine
  4. Google Cache
  5. Pressequellen (Titel-only)

Getestet: Tavily=blockiert, Wayback=, GoogleCache=
Kritisch: Stage 1 braucht Residential Proxy (aktuell keiner gefunden)
2026-06-21 19:03:46 +02:00
Hermes Agent 5ada0c5018 Fix: Like-Icons im liked-Zustand sichtbar (weißer Stroke)
Problem: Hardgecodetes stroke='#20228a' im SVG verschwand
auf dem ebenfalls blauen .liked-Hintergrund (#20228a).
Fix: CSS-Override für .liked svg/svg path → stroke:#fff !important
in .stat-like-btn, .comment-like-btn und .detail-like-btn.
2026-06-20 11:26:41 +02:00
Hermes Agent 03ae39bc5a Herz-Icon (monochrom BSN-Blau) + Kommentar-Likes
- Like-Icon: Thumbs-Up → modernes Herz-Outline (Feather-Style) in #20228a
- Alle 4 Stellen ersetzt (Frontpage Cards, Card-JS, Detailseite, Detail-JS)
- DB-Migration: ALTER TABLE comments ADD COLUMN likes
- API: POST /api/comment-like/<id> mit Cookie-Dedup
- Like-Button in jedem Kommentar (clike-count)
- CSS .comment-like-btn analog zu .stat-like-btn
- JS: localStorage likedComments für Persistenz
- SQL-Query: comments SELECT um likes erweitert
2026-06-20 11:21:31 +02:00
Hermes Agent b3b110a2ec Filter: Text-Button statt Pfeil-Icon + Overlay-Fenster
- Button zeigt jetzt 'Filter' statt SVG-Pfeil (↑↓)
- Filter-Leiste öffnet sich als Overlay-Fenster (Backdrop + Blur)
- Schließen per Button oder Klick auf Backdrop
- Kein localStorage-Persist mehr (Overlay schließt immer)
2026-06-20 10:44:04 +02:00
Hermes Agent 0dda6f536c Offcanvas-Nav: Community-Sektion mit Login/Registrierung entfernt
Login bleibt nur im Header-Dropdown (rechts oben). Mobile Nav jetzt schlanker:
Navigation → Startseite, Rechtliches → Impressum/Datenschutz/AGB
2026-06-20 10:38:57 +02:00
Hermes Agent 76da62af16 Login-Dropdown in Nav + Welcome-Overlay mit localStorage-Dismiss
- Login/Logout als Dropdown in der Header-Navigation (rechts)
- Dynamisch: eingeloggt = Profil/Abmelden, nicht eingeloggt = Mini-Login-Formular
- Offcanvas-Nav zeigt ebenfalls dynamisch Profil/Logout oder Registrieren/Login
- Welcome-Overlay beim ersten Besuch mit Erklärung der Seite
- Checkbox 'Nicht mehr anzeigen' speichert in localStorage
- Backdrop-Blur wie bei anderen Overlays
2026-06-20 10:35:26 +02:00
Hermes Agent 1dc63a4eda feat: BSN Watchdog — überwacht Flask, Tunnel, Article Server, DB, RAM alle 5 Min 2026-06-20 09:03:49 +02:00
Hermes Agent c3b0e8fcf2 docs: korrigierte Architektur — MoE-Modelle, sequentiell, llama-swap, kein Llama/Freeze 2026-06-19 23:42:10 +02:00
Hermes Agent a140f566ed docs: Architektur mit DGX Spark & Strix Halo — lokaler KI-Cluster, 100% DSGVO, 0€ API 2026-06-19 23:32:45 +02:00
Hermes Agent fa63d228f3 Chat: Klickbare Links zu Beiträgen ermöglicht
- Backend: Markdown-Links [text](/beitrag/ID) → HTML <a> im Reply
- Backend: [text](https://...) → klickbare externe Links
- Backend: \n → <br> für korrekte Darstellung mit innerHTML
- Frontend: textContent → innerHTML (Links werden klickbar)
- Ausverkauft-Meldungen: Beitrags-ID im Context für Verlinkung
- System-Prompt: Klarere Link-Anweisungen für LLM
2026-06-19 20:28:06 +02:00
Hermes Agent 0b970f06ed Revert visualViewport-Handler — Overlay rutschte komplett weg
Der translateY(-offsetTop) war zu aggressiv und schob das Overlay
bei iOS-Tastatur-Öffnung komplett aus dem Bildschirm.
Entfernt. Die anderen iOS-Fixes (maximum-scale, 16px-Font, 100dvh) bleiben.
2026-06-19 20:21:12 +02:00
Hermes Agent 4c6baafa10 iOS-Fixes: Zoom + Overlay-Verrutschen bei Tastatur-Öffnung behoben
- Viewport-Meta: maximum-scale=1.0 + viewport-fit=cover + user-scalable=no
  → verhindert Zoom beim Fokussieren von Input-Feldern auf iOS
- Input-Font-Size auf 16px (Chat + Submit-Formular)
  → iOS Safari zoomt nicht mehr rein (<16px trigger)
- Backdrop: height:100dvh für lückenlose Abdeckung
- visualViewport-Resize-Handler: Overlays werden bei iOS-Tastatur
  korrekt nach oben geschoben, kein seitliches Verrutschen mehr
2026-06-19 20:17:06 +02:00
Hermes Agent b458bfd5d4 Mobile-Layout-Fixes: Header-Wrapping + Overlay-Click-Through verhindern
- .site-header: flex-wrap:wrap, kleinere padding/gap, mobile optimiert
- .site-logo-sub: white-space:nowrap entfernt → bricht bei schmalen Screens um
- Overlay-Backdrop z-index auf 10000 (über Bubbles mit 9999)
- Overlays z-index auf 10001 (über Backdrop)
- Bubbles werden via .hidden-Klasse versteckt wenn Overlay offen
- chat-bubble/submit-bubble: opacity/pointer-events Transition
2026-06-19 20:11:00 +02:00
Hermes Agent 4d55bc1b13 phone_hash: Klartext-Telefonnummern durch Hashes ersetzen
- users.phone: NOT NULL entfernt, speichert nur last4
- /register: phone_hash statt Klartext-phone
- WhatsApp-Registrierung: _hash_phone() statt Klartext
- /api/submit: phone_hash in submissions gespeichert
- DB-Migration: bestehendes Klartext-phone in submission #72 gehasht
- submissions: phone_hash column hinzugefügt
2026-06-19 18:06:22 +02:00
Hermes Agent 66f4ef59da fix: user routes mit cleanen String-Templates — kein f-string/.format-Mix 2026-06-19 17:51:41 +02:00
Hermes Agent 392845afb4 user-profiles: Cross-Channel-Identität mit Registrierung, Login, Profil + WhatsApp/Telegram-Flow 2026-06-19 17:44:35 +02:00
Hermes Agent ffff6d1fa3 faq-trigger: auch in /api/chat (Website-Chat) einbauen 2026-06-19 17:37:03 +02:00
Hermes Agent 99a5a8975f chatbot-faq: Nummer-speichern-Hinweis in Willkommenstext + FAQ-Trigger für keine-Antwort-Fragen 2026-06-19 16:57:09 +02:00
Hermes Agent 05532afec6 admin-notify: WhatsApp-Benachrichtigungen an Daniel bei neuer Einsendung + Veröffentlichung 2026-06-19 16:44:20 +02:00
Hermes Agent 9f93d247eb feat: KI-Bewertung + Begründung in Submission-Detail + #76 entblockt 2026-06-19 13:56:48 +02:00
Hermes Agent 8bc524ca9c fix: Audio-Dateien nie auf Frontpage + Sprach-Regeln im Triage-Prompt
- media_publish_flags: .ogg/.mp3/.wav auf '0' (nicht veröffentlichen)
- TRIAGE_PROMPT: Sprachnachrichten-Regeln (dünn=Zusammenfassung, reichhaltig=1:1)
- threading-Import-Fix in WhatsApp/Telegram-Webhooks
2026-06-19 13:36:00 +02:00
Hermes Agent ad3082c195 fix: published_at bei Tier-1-Triage setzen + Mobile-Triage-Badges + für Ungeprüfte
- published_at = CURRENT_TIMESTAMP bei Tier-1-Publish (sonst sortieren NULLs ans Ende)
- Mobile-Cards zeigen jetzt auch Triage-Badge (🟢🟡🔴)
- Desktop-Tabelle zeigt  für noch nicht triagierte Einträge
- TRIAGE_DELAY_SECONDS env-var (default 360)
2026-06-19 13:29:31 +02:00
Hermes Agent 6eadb7342b fix: Frontpage-Text gekürzt (erster Satz/80 Zeichen) + Triage-Timing 6min + SQLite-Fix
- Frontpage: Nur erster Satz pro Karte (max 80 Zeichen)
- Triage: 6 Min Verzögerung nach letzter Nachricht (Thread-Window)
- _run_triage_async: Direkt-SQLite statt get_db() (kein Flask-Context nötig)
2026-06-19 13:04:27 +02:00
Hermes Agent bc8e599018 feat: LLM-Intake-Triage — 3-Stufen-KI-Prüfung aller Chatbot-Einreichungen
- Neue DB-Spalten: triage_tier, triage_reasons, triage_at, public, display_text
- triage_submission() via DeepSeek V4 Flash: klassifiziert in 🟢/🟡/🔴
- display_text: gute Texte 1:1, kurze/noisy Texte werden aufbereitet
- Bild-Sicherheitsprüfung via Gemini Vision (Nazi-Symbole, Gewalt etc.)
- Async nach WhatsApp/Telegram-Webhook — nicht blockierend
- Admin-Dashboard: Triage-Badges + Filter (🟢/🟡/🔴)
- Öffentliches Frontend: Nur public=1 + triage_tier=1 wird angezeigt
- Auto-Antworten: 🟢=Danke, 🟡=Prüfung, 🔴=keine Antwort
2026-06-19 12:56:34 +02:00
Hermes Agent 55a2de04ca Autostart-Script für Flask + Cloudflare Tunnel 2026-06-19 10:42:56 +02:00
Hermes Agent f94884f54c .gitignore: UUID credential files (cloudflared tunnel) 2026-06-19 10:42:42 +02:00