Commit Graph

28 Commits

Author SHA1 Message Date
Hermes Agent be19c0ec83 artikel: Gamegenic wird Partner von Tolarian Community Coll 2026-06-23 17:36:22 +02:00
Hermes Agent bc1c025101 artikel: Gamegenic × Tolarian Community College — The Academic Deckbox 2026-06-23 17:33:39 +02:00
Hermes Agent fa281391a9 feat: article_pipeline.py — Stage 0 Prompt-Builder für BSN-Artikel-Workflow 2026-06-23 14:35:52 +02:00
Hermes Agent 85aa2781f1 spec: article pipeline workflow for Cody 2026-06-23 14:26:02 +02:00
Hermes Agent e63004daca gamegenic: add head/body structure for article server listing 2026-06-23 12:57:32 +02:00
Hermes Agent 082af0a46b gamegenic: fix unlinked PM source + html ending + h2/span Quellen 2026-06-23 12:55:40 +02:00
Hermes Agent 42069f9aa7 QC: fix Survivalist article + add checks 12-13 (XML-API refs, unlinked sources)
- Fix artikel_survivalist: 'BGG-Daten via XML API v2' -> klickbare Links
- verify_article.sh: CHECK 12 (keine XML-API-Referenzen)
- verify_article.sh: CHECK 13 (Quellen müssen verlinkt sein)
2026-06-23 12:37:59 +02:00
Hermes Agent 26f8ac477d Fix 16:9 output + MIME detection for Image-to-Image
- Pillow installiert (fehlte → try/except lief ins Leere)
- _detect_image_mime(): Magic-Bytes-Erkennung (JPEG/PNG/WebP/HEIC)
- _gemini_generate_image(): kein hartes 'image/jpeg' mehr
- PIL-Resize 1920×1080 greift jetzt korrekt
2026-06-23 08:57:26 +02:00
Hermes Agent 202cb9da42 feat: Imagen → Gemini Flash Image (gemini-2.5-flash-image)
- Gemini kann Image-to-Image (Cover+Landschaft), Imagen nur Text
- generateContent statt predict, inlineData statt rawBytes
- PNG-Output, optionale PIL-Konvertierung zu JPEG
- image_base64 als Referenzbild im contents[].parts[]
- Getestet: Text-to-Image + Image-to-Image
2026-06-23 08:38:56 +02:00
Hermes Agent 23a4bff254 feat: Imagen Image-to-Image — Referenzbild als rawBytes übergeben
- _imagen_generate akzeptiert image_base64 (str|None)
- Multipart-Parser extrahiert hochgeladenes Bild als Base64
- rawBytes im Instance-Feld für Image-to-Image-Modus
- Duplicate import base64 as b64 entfernt
- Getestet: Text-to-Image + Image-to-Image funktionieren
2026-06-23 08:30:48 +02:00
Hermes Agent 53efc2f93b feat: NanoBanana → Google Imagen Backend (synchron, kein Polling)
- Ersetzt NanoBanana (async, Credits-Probleme) durch Google Imagen
- Synchron: Bild kommt als Base64 direkt in der Response
- JS vereinfacht: pollStatus() komplett entfernt (-70 Zeilen)
- Assign-Handler unterstützt jetzt lokale /media/ Pfade
- Default-Auflösung 1K, Imagen-Key via bsn-secrets (google-imagen-key)
- Editor: Header auf Google Imagen aktualisiert
2026-06-22 23:50:24 +02:00
Hermes Agent 8299ad1e24 Fix: NanoBanana null-safe handling + bessere Fehlermeldungen
- _handle_nanobanana_generate: Prüfe code!=0 (z.B. 402=kein Guthaben), data=None-Safe
- _handle_nanobanana_status: data=None-Safe + response=None-Safe
- JavaScript: Bessere Fehlermeldung wenn resp.json() fehlschlägt
- Verhindert 'NoneType' object has no attribute 'get' Crash
2026-06-22 22:46:24 +02:00
Hermes Agent 513fc0e6af feat: NanoBanana Bild-Generator — /nanobanana Editor mit Upload, Prompt, Polling, Artikel-Zuordnung
- Neue Unterseite /nanobanana im Article-Server (Port 8890)
- Foto-Upload per Drag/Drop (Referenzbild für Image-to-Image)
- Prompt-Textarea mit Char-Zähler + Ratio/Resolution-Selects
- BSN-Blau UI, Mobile-First CSS, Inline-JS
- Backend: /nanobanana/generate (POST), /status, /articles, /assign
- NanoBanana generate-2 API via bsn-secrets Key
- Automatisches Polling (5s, max 5min) mit Spinner
- Download-Button + Artikel-Zuordnung (unveröffentlichte Artikel)
- Live getestet: Page 200, Generate 200, Status successFlag=1
2026-06-22 22:35:44 +02:00
Hermes Agent 889acd8c6d Fix: H1+Meta aus Joomla-Body strippen, Bild-Auto-Delete entfernt
- H1 und <p class=meta> werden vor dem Senden an Joomla aus dem Body gefiltert
  (Daniel 19.06.: Titel+Lesezeit dürfen nicht im Fließtext landen)
- os.remove() für Bilder nach erfolgreichem Publish entfernt
  (Bilder bleiben auf Disk erhalten für spätere Referenz/Live-Schaltung)
2026-06-19 09:17:41 +02:00
Hermes Agent 0f787589fe fix: upload images to Spiele/<year>/ directory on publish 2026-06-19 00:50:43 +02:00
Hermes Agent 7629eecc24 fix: publish: auto-include meta description, keywords, image upload, Daniel as author
- Add metadesc + metakey extraction from HTML <meta> tags
- Upload article image to Joomla media endpoint before publish
- Set created_by=560 (Daniel Krause) for all articles
- Image is uploaded as both image_intro and image_fulltext
2026-06-19 00:49:15 +02:00
Hermes Agent 3e6db33027 feat: Rubrik-Dropdown beim Live-Stellen — freie Kategoriewahl
- Neuer <select id='rubricSelect'> neben dem 🔴 Live Toggle
- Alle 10 Rubriken: Nachrichten, Angebot, Crowdfunding, Branche,
  Neuerscheinungen, Ankündigungen, Zubehör, Brettspieltest, Magazin, Video, Podcast
- Bei Live+Haken: Rubrik-Wahl pflicht (Toast wenn 'Rubrik wählen…' gesetzt)
- Backend _handle_publish: nutzt rubric vom Client statt meta category-id
- SAFETY GATE bleibt: ohne Live-Haken → immer Korrektur (catid=61)
- Confirm-Dialog zeigt gewählte Rubrik an
2026-06-19 00:38:33 +02:00
Hermes Agent ced413710f chore: Orphan-Section + Image1-6.jpg entfernt — war nur Test/Debug
- Verwaiste-Bilder-Sektion aus build_index() entfernt
- Image1.jpg–Image6.jpg vom Workspace gelöscht
- CSS (orphan-box etc.) bleibt harmlos im Stylesheet
2026-06-19 00:16:45 +02:00
Hermes Agent a16b3368c6 fix: accept-Attribut von File-Inputs entfernt — Browser-Bug blockierte Bilder
- accept='image/*,.jpg,.jpeg,...' wird von Browsern unterschiedlich interpretiert
- Manche Browser machen UND statt ODER → keine Bilder sichtbar
- Fix: accept komplett raus, Server-Validierung bleibt aktiv (.jpg/.jpeg/.png/.webp/.gif/.svg)
2026-06-19 00:15:32 +02:00
Hermes Agent 6e20684af4 feat: Verwaiste-Bilder-Scanner — Orphans automatisch finden + per Dropdown zuordnen
- find_orphan_images(): scannt Workspace nach Bildern ohne article_images.json-Eintrag
- Gelbe Orphan-Box oben auf der Seite: alle verwaisten Bilder mit Artikel-Dropdown
- assignOrphan() JS: Dropdown-Auswahl → fetch /assign-image → Toast + Reload
- _handle_assign_image(): Backend validiert Bildpfad + Artikel + speichert Mapping
- Test-JPEGs aus media/ bereinigt, article_images.json sauber initialisiert
2026-06-19 00:12:59 +02:00
Hermes Agent 32d1e1ef86 fix: Upload-Zone vereinfacht — kein manueller Dateiname mehr
- Text-Input für Artikel-Dateinamen komplett entfernt
- uploadFile() nimmt jetzt den ERSTEN markierten Artikel (Checkbox)
- Drag&Drop-Zone oben: Ziel = markierter Artikel oder Hinweis
- JPEG-Accept verbessert: image/* + explizit .jpg,.jpeg,.png,.webp,.gif
- Obsolete CSS für input[type=text] in upload-zone entfernt
- Nach Upload: Auto-Reload für Badge-Update
2026-06-19 00:08:02 +02:00
Hermes Agent 681437b86b fix: hidden-Attribut von File-Inputs entfernt (verhinderte Bild-Auswahl)
- hidden auf input[type=file] blockiert label-Trigger in manchen Browsern
- CSS .row-file-input { display: none } reicht zum Verstecken
- accept="image/*" ist korrekt gesetzt
2026-06-19 00:02:13 +02:00
Hermes Agent 9e727ef427 chore: remove backup file 2026-06-18 23:59:56 +02:00
Hermes Agent 726f25ff83 fix: Bild-Upload pro Artikel-Zeile — Datei wählen ohne Dateinamen tippen
- Jede Artikel-Zeile hat jetzt einen 📷 Upload-Button (row-upload-btn)
- Klick → native File-Picker → Auto-Upload mit dem korrekten Artikel-Dateinamen
- uploadForRow() JS-Funktion: async fetch + Badge-Update + Toast-Feedback
- Bugfix: f.write(file_data) statt f.write(data) im _handle_upload
- Upload-Zone oben bleibt für Bulk/Drag-Drop erhalten
2026-06-18 23:59:52 +02:00
Hermes Agent ebcd338bd4 SAFETY GATE: Kein Live-Publish ohne explizite Freigabe
- _handle_publish() braucht 'live':true im JSON-Payload
- Ohne live=true: ALLE Artikel → catid=61, state=0 (Korrektur)
- Meta category-id wird NUR bei live=true respektiert
- UI: roter Live-Schalter mit Warn-Confirm
- Server-Log zeigt [PUBLISH] Modus an
- Response enthält live_mode flag
- Daniel 18.06.: 10.000+ Leser/Tag, NIE ohne Freigabe live
2026-06-18 22:50:25 +02:00
Hermes Agent 934ac899ce VG-Wort: Zählmarke NUR bei state=1 (live) verbrauchen
- if state == 1 → Zählmarke aus Pool holen + Pixel einbauen
- Korrektur (state=0) → KEINE Zählmarke, Log-Meldung 'Übersprungen'
- Pool: 19/20 verfügbar (1 korrekt für Live-Test verbraucht)
2026-06-18 22:42:25 +02:00
Hermes Agent eb59327086 VG-Wort: Zählmarken-Pool-Integration via subprocess
- _handle_publish() ruft vgwort_pool.py get auf
- Pixel-Tag auto in articletext vor </article> eingebaut
- Live getestet: Pixel korrekt (15371, vg09.met.vgwort.de)
- Pool-Script: ~/.hermes/vgwort_pool.py
2026-06-18 22:39:10 +02:00
Hermes Agent 2f356ddfb8 Initial commit: article-server mit Publish-Workflow
- Publish-Gate entfernt (Korrektur ist Redaktion-only)
- Default catid=61 (Korrektur), state=0, access=6
- Öffentliche Rubriken auto-featured für 3 Tage
- featured_up=jetzt, featured_down=+3 Tage
- per meta name='featured-days' content='N' anpassbar
2026-06-18 18:33:25 +02:00