Commit graph

156 Commits

Autor SHA1 Nachricht Datum
Claude Dev
be43b0ffcf Bump chat.js cache version
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:08:23 +01:00
Claude Dev
77e83efae0 Tutorial: Echte Leaflet-Karte mit Hamburg-Markern statt Platzhalter
- Initialisiert eine echte Leaflet-Map auf Hamburg (Zoom 13) mit 3 Demo-Markern:
  Burchardkai Terminal (Hauptereignisort), Hamburg Innenstadt, Elbe/Hafengebiet
- Farbcodierte Marker mit Legende (Hauptereignisort/Erwaehnt/Kontext)
- Marker-Popups mit Artikelanzahl, Hauptmarker oeffnet automatisch
- Karten-Step ist jetzt eine interaktive Demo (disableNav):
  Cursor faehrt zum Marker und klickt ihn, dann werden Geoparse-Button
  und Vollbild-Button nacheinander gehighlightet
- Theme-abhaengige Tile-Layer (dark/light)
- Map wird beim Tutorial-Ende sauber entfernt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:06:52 +01:00
Claude Dev
5289bbf29b Tutorial: Spotlight und Bubble auf sichtbaren Viewport-Bereich beschraenken
- Spotlight wird auf den sichtbaren Teil des Elements geclippt statt
  ueber den Viewport hinauszuragen
- Bubble-Position nutzt sichtbaren Elementbereich statt voller Rect
- Demo-Summary-Text gekuerzt, damit er in die Lagebild-Kachel passt
- Behebt das Problem, dass bei grossen Kacheln (Lagebild, Timeline, Karte)
  die Sprechblase ausserhalb des sichtbaren Bereichs landete

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:04:02 +01:00
Claude Dev
b33e635746 Tutorial Step 4: Virtuelle Maus-Demo fuer Lage-Typ-Wechsel
Cursor faehrt zum Select-Feld, wechselt von Live-Monitoring zu Recherche
und zurueck. Nav-Buttons erst nach Demo-Ende aktiv.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:01:25 +01:00
Claude Dev
adc83f3997 Chat-Begruessung kuerzen: Nur noch ein kurzer Satz statt Beispielliste
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 14:41:34 +01:00
Claude Dev
c031fec27e Fix Tutorial-Hinweis im Chat: sessionStorage statt localStorage, Close-Button
- Hinweis erscheint beim ersten Chat-Oeffnen jeder Browser-Session
- X-Button zum Wegklicken (setzt sessionStorage, nicht localStorage)
- Klick auf Hinweis-Text startet Tutorial und schliesst Chat
- Naechste Session zeigt den Hinweis erneut an

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 14:36:17 +01:00
Claude Dev
d5022f0d6f Tutorial: Demo-Lage mit Platzhaltern, detaillierte Erklaerungen, Scroll-to-View
Kompletter Umbau des Tutorial-Systems:
- Tutorial funktioniert jetzt ohne bestehende Lagen
- Injiziert Demo-Lage (Explosion Hamburger Hafen) mit realistischen Platzhaltern
  in Sidebar, Lagebild, Faktencheck, Timeline, Quellen und Karte
- 25 Steps statt 20: Neue Lage vs Recherche erklaert, jede Kachel detailliert
- ScrollIntoView vor jedem Step (wichtig fuer Karte etc.)
- Sub-Element-Highlighting: Markiert spezifische Funktionen innerhalb der Kacheln
  (Quellenverweise, Filter, Buttons, Kartensteuerung)
- Sauberes Aufraumen: Demo-Daten werden nach Tutorial entfernt, Dashboard-Zustand
  wird vollstaendig wiederhergestellt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 14:32:56 +01:00
Claude Dev
e5bcfb3d75 Interaktives Tutorial-System mit 20 Schritten, Spotlight, Sprechblasen und virtuellen Maus-Demos
Neues Tutorial-System fuer gefuehrten Rundgang durch den Monitor:
- tutorial.js: Tutorial-Engine mit Spotlight-Abdunkelung, Bubble-Navigation,
  virtuellem Cursor fuer Drag/Resize-Demos, Keyboard-Support (Escape/Pfeiltasten)
- 20 Steps: Welcome, Sidebar, Lagen, Kacheln, Layout, Theme, Export, Chat, etc.
- Automatisches Ueberspringen von Steps wenn keine Lage geoeffnet
- Modal-Handling fuer Neue-Lage und Quellenverwaltung Steps
- Chat-Integration: Tutorial-Hinweis beim ersten Oeffnen, Keywords (rundgang/tutorial/tour/fuehrung)
- localStorage-Persistenz (osint_tutorial_seen)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 14:23:32 +01:00
Claude Dev
bbd4821011 fix: Quellenlinks mit Buchstaben-Suffix ([389a] etc.) korrekt verlinken
Probleme:
- Frontend-Regex matchte nur reine Zahlen, nicht [389a]-Style Refs
- 17 alphanumerische Quellen im Irankonflikt blieben unverlinkt
- Orchestrator-Validierung erkannte diese Refs nicht als fehlend

Fixes:
- Frontend: Regex erweitert auf [\d+a-z?], Vergleich mit String und Number
- Orchestrator: Validierung erkennt jetzt auch alphanumerische Refs
- Analyzer-Prompts: Explizite Anweisung, nur ganze Zahlen als Nr zu verwenden
- 822a und 859a in Irankonflikt sources_json nachgetragen
- Cache-Buster aktualisiert

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:34:55 +01:00
Claude Dev
599102740a fix: updated_at wird jetzt immer nach Refresh aktualisiert
Bisher wurde updated_at nur gesetzt wenn die Claude-Analyse erfolgreich
war. Bei fehlgeschlagenem JSON-Parsing blieb der alte Timestamp stehen,
obwohl neue Artikel gesammelt und Faktenchecks durchgefuehrt wurden.
Jetzt wird updated_at am Ende jedes Refreshs gesetzt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:29:59 +01:00
Claude Dev
b38ae9e1b1 fix: Quellenlinks bei String-Nr repariert (574, 610, 611, 617 etc.)
Ursache: Claude liefert teilweise Quellennummern als String statt Integer.
Der Frontend-Vergleich (===) schlug dann fehl: "574" !== 574.

Fixes:
- 95 String-Nummern in Irankonflikt sources_json zu Integer konvertiert
- 5 Duplikate entfernt
- Frontend: Number() statt parseInt/=== fuer robusten Vergleich
- Orchestrator: Automatische Konvertierung von String-Nr zu Integer vor DB-Speicherung
- Cache-Buster aktualisiert

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:00:00 +01:00
Claude Dev
40011b515a ui: Netzwerkanalyse-Button voruebergehend ausgeblendet
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:55:17 +01:00
Claude Dev
aad473a568 feat: Quelleneinordnung (Bias) in Lageberichten fuer kritische Quellen
Parteiische Quellen (pro-russisch, pro-iranisch, rechtsextrem etc.)
werden jetzt im Lagebericht-Fliesstext als solche gekennzeichnet,
damit der Leser die Informationen einordnen kann.

Aenderungen:
- Orchestrator reichert Artikel mit source_bias aus der sources-Tabelle an
- Analyzer zeigt Einordnung im Artikel-Kontext fuer den Claude-Prompt
- Alle 4 Prompt-Templates enthalten neue Regel zur Quellenkennzeichnung

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:53:36 +01:00
Claude Dev
bf21bc4e2c fix: Fehlende Quellenverweise in Lageberichten repariert und Validierung ergaenzt
17 fehlende Quellen (815-831) im Irankonflikt und 11 fehlende (77-87)
im Ukraine-Konflikt in sources_json nachgetragen. Ursache: Claude
referenziert Quellen im Summary-Text, liefert sie aber nicht immer
im sources-Array mit. Neue Validierung im Orchestrator erkennt
fehlende Quellennummern nach dem Merge und fuegt Platzhalter ein.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:46:25 +01:00
Claude Dev
1831d52945 fix: Cache-Buster aktualisiert fuer Quellen-Info-Button
Statische JS/CSS-Dateien hatten alten Cache-Buster (20260304h),
dadurch wurde die neue components.js mit Info-Tooltips nicht geladen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:37:37 +01:00
Claude Dev
d031fb28d6 feat: Info-Button mit Tooltip (Typ, Sprache, Ausrichtung) in Quellenverwaltung
- DB-Migration: language und bias Spalten zur sources-Tabelle hinzugefuegt
- Alle 254 Quellen mit Metadaten befuellt (Sprache, politische Ausrichtung)
- SourceResponse-Modell um language/bias Felder erweitert
- Info-Icon (i) mit Hover-Tooltip nach source-group-name eingefuegt
- Tooltip zeigt Typ, Sprache und Ausrichtung der jeweiligen Quelle

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:28:57 +01:00
Claude Dev
a2fd01e177 fix: Telegram-Kanaele zeigen echten Namen statt _single_ID in Quellenverwaltung
Telegram-Quellen haben kein domain-Feld, daher wurde der interne
Gruppierungsschluessel _single_<id> als Anzeigename verwendet.
Jetzt wird bei _single_-Prefix auf den tatsaechlichen Kanalnamen zurueckgegriffen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 10:19:34 +01:00
Claude Dev
5018dddad5 fix: Lagen im Netzwerk-Modal sortiert — Live alphabetisch, dann Analyse alphabetisch
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:42:56 +01:00
Claude Dev
432147de4b fix: Checkbox-Layout im Netzwerkanalyse-Modal korrigiert
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:41:32 +01:00
Claude Dev
d9fbb955dc fix: Sidebar-Layout — Netzwerkanalyse-Button neben Neue Lage, Deep-Research statt Analysen & Briefings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:38:05 +01:00
Claude Dev
9a35973d00 feat: Netzwerkanalyse-Feature (Wissensgraph)
Neues Feature zur Visualisierung von Entitäten und Beziehungen
aus ausgewählten Lagen als interaktiver d3.js-Netzwerkgraph.

- Haiku extrahiert Entitäten (Person, Organisation, Ort, Ereignis, Militär)
- Opus analysiert Beziehungen und korrigiert Haiku-Fehler
- 6 neue DB-Tabellen (network_analyses, _entities, _relations, etc.)
- REST-API: CRUD + Generierung + Export (JSON/CSV)
- d3.js Force-Directed Graph mit Zoom, Filter, Suche, Export
- WebSocket-Events für Live-Progress während Generierung
- Sidebar-Integration mit Netzwerkanalysen-Sektion

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:34:26 +01:00
Claude Dev
d86dae1e86 fix: Alle Highlight-Selektoren auf korrekte DOM-Elemente gemappt 2026-03-15 23:54:33 +01:00
Claude Dev
13ae36cfcf fix: Quellen-Highlight auf Quellen-verwalten-Button statt Uebersicht-Kachel 2026-03-15 23:41:28 +01:00
Claude Dev
50281b4986 fix: Highlight-Keywords praeziser, korrekte DOM-Selektoren fuer Quellen/Faktencheck/Karte 2026-03-15 23:39:39 +01:00
Claude Dev
711b8b625b fix: Highlight nur bei API-Antworten, nicht bei Begruessung 2026-03-15 23:37:20 +01:00
Claude Dev
a7741b5985 feat: Chat-Highlight scrollt zum Element, roter prominenter Pulse-Effekt 2026-03-15 23:35:58 +01:00
Claude Dev
7d127688d1 feat: UI-Highlight bei Chat-Antworten, Barrierefreiheits-Doku im Assistenten 2026-03-15 23:31:09 +01:00
Claude Dev
d8f8fe4c86 fix: Support-Verweis klarstellen, kein Einblick in Nutzerinhalte suggerieren 2026-03-15 23:24:05 +01:00
Claude Dev
c010843ca7 fix: Chat-Widget JS-Syntaxfehler behoben (mehrzeiliger String) 2026-03-15 23:18:41 +01:00
Claude Dev
767d45de9b fix: Chat-Begruessung und Prompt angepasst, keine Limitationen auflisten, Support-Verweis 2026-03-15 23:15:25 +01:00
Claude Dev
c4f3e7c36a refactor: Chat-Assistent auf interaktive Anleitung umgebaut, DB-Lookups und Lage-Kontext entfernt 2026-03-15 23:11:38 +01:00
Claude Dev
cf517336c9 fix: Tooltip-Text erbt UI-Schriftart statt Serif
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:07:31 +01:00
Claude Dev
a825dfd156 fix: Info-Icon bei Art der Lage entfernt (Hint-Text reicht)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:06:17 +01:00
Claude Dev
ac02413c59 fix: Redundante form-hints entfernt wo Info-Icon Tooltip existiert
Internationale Quellen, Telegram, Aufbewahrung: Doppelte Info-Texte entfernt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:04:53 +01:00
Claude Dev
8f5f73dbd6 fix: Tooltip-Zeilenumbrüche bei Mehrzustands-Erklärungen
Internationale Quellen, Sichtbarkeit, Faktencheck: Jeder Zustand beginnt in eigener Zeile

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:54:48 +01:00
Claude Dev
e013bcf48e feat: Checkbox-Filter fuer Karten-Legende - Marker pro Kategorie ein-/ausblendbar 2026-03-15 20:52:16 +01:00
Claude Dev
2093ef3c67 fix: Tooltip-Text größer (12.5px statt 11px)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:50:44 +01:00
Claude Dev
b1b92510f3 fix: Info-Icon Schrift von Caps auf normale Serif-Schrift
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:48:31 +01:00
Claude Dev
7d06a9a690 ui: Info-Icons mit Hover-Tooltips an 6 Stellen
- CSS-only Tooltip-System (.info-icon mit data-tooltip Attribut)
- Modal: Art der Lage, Internationale Quellen, Telegram, Sichtbarkeit, Aufbewahrung
- Dashboard: Faktencheck-Kachel (erklärt Status-Kategorien)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:44:59 +01:00
Claude Dev
b2ee57b15d ui: Wording-Überarbeitung — Live-Monitoring / Analyse statt Ad-hoc / Recherche
Sidebar: "Live-Monitoring" und "Analysen & Briefings" statt "Aktive Lagen" / "Aktive Recherchen"
Modal: Verständliche Beschreibungen statt technischer Begriffe (RSS-Feeds, WebSearch, Deep Research)
Badge: "Live" / "Analyse" statt "Breaking" / "Recherche"
Button: "+ Neue Lage" statt "+ Neue Lage / Recherche"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:28:25 +01:00
Claude Dev
6a2bd9e9c9 feat: Adhoc-Recherche bekommt bestehende Artikel als Kontext
- RESEARCH_PROMPT_TEMPLATE: {existing_context} Platzhalter eingefügt
- search(): Baut bei Adhoc-Folge-Refreshes Kontextblock mit bis zu 30 bekannten Headlines auf
- orchestrator: Übergibt bestehende Artikel jetzt für ALLE Incident-Typen, nicht nur Research

Effekt: Bei Adhoc-Auto-Refreshes findet Claude WebSearch gezielt neue Quellen statt immer dieselben Mainstream-Treffer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 20:07:13 +01:00
Claude Dev
e0f8124e10 feat: Mehrstufige Deep-Research-Pipeline mit Quellenkontext
- DEEP_RESEARCH_PROMPT: 4-Phasen-Strategie (Breite Erfassung → Lückenanalyse → Gezielte Tiefenrecherche → Verifikation)
- Ziel 15-25 Quellen aus 5+ Quellentypen statt 8-15 aus Mainstream
- researcher.search(): Neuer Parameter existing_articles — bereits bekannte Quellen werden als Kontext übergeben, damit Claude gezielt neue Perspektiven findet
- orchestrator: DB-Abfrage vor Pipeline verschoben, bestehende Artikel als Kontext an Researcher übergeben (nur Research-Typ)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:33:56 +01:00
Claude Dev
0019d74aea feat: Intelligente Telegram-Kanal-Selektion und verbesserte Quellenzuordnung
- Researcher: Claude-basierte Vorauswahl relevanter Telegram-Kanäle per Haiku
- FactChecker: Verbesserte Quellen-Zuordnung mit Relevanz-Scoring (Top 5)
- FactChecker: URLs werden nicht mehr doppelt zugeordnet, sources_count wird aktualisiert
- TelegramParser: Kanal-Filterung per channel_ids statt categories
- TelegramParser: Lockereres Keyword-Matching (1 Match reicht, da vorselektiert)
- Models: telegram_categories Feld entfernt (durch KI-Selektion ersetzt)
- Main: Chat-Router eingebunden unter /api/chat

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:01:32 +01:00
Claude Dev
19da099583 feat: Kontextabhängige Karten-Kategorien
4 feste Farbstufen (primary/secondary/tertiary/mentioned) mit
variablen Labels pro Lage, die von Haiku generiert werden.

- DB: category_labels Spalte in incidents, alte Kategorien migriert
  (target->primary, response/retaliation->secondary, actor->tertiary)
- Geoparsing: generate_category_labels() + neuer Prompt mit neuen Keys
- QC: Kategorieprüfung auf neue Keys umgestellt
- Orchestrator: Tuple-Rückgabe + Labels in DB speichern
- API: category_labels im Locations- und Lagebild-Response
- Frontend: Dynamische Legende aus API-Labels mit Fallback-Defaults
- Migrationsskript für bestehende Lagen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:04:02 +01:00
Claude Dev
5fd65657c5 fix: Karten-Container füllt jetzt die volle Kachel-Höhe aus
- CSS: min-height:0 und height:100% für Flex-Container
- JS: Höhe wird immer explizit aus der Gridstack-Kachel berechnet,
  nicht nur als Fallback unter 50px

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:47:52 +01:00
Claude Dev
9591784ee4 fix: Karten-Höhe auf gs-h=8 zurückgesetzt (war auf 4 gefallen)
HTML-Attribut wieder an den DEFAULT_LAYOUT in layout.js angeglichen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:45:34 +01:00
Claude Dev
a9f22108da fix: Chat-Overlay Breite auf 85vw
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:35:46 +01:00
Claude Dev
cc5da6723f fix: Chat-Overlay Breite auf 70% der Fenstergröße
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:34:12 +01:00
Claude Dev
cd027c0bec fix: Chat-Vollbild als zentriertes großes Overlay statt echtem Fullscreen
700px breit, 80vh hoch, zentriert, mit Rand und abgerundeten Ecken.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:31:31 +01:00
Claude Dev
4a0577d3f4 feat: Vollbild-Modus für Chat-Assistent
Neuer Button zwischen Reload und Schließen. Toggled zwischen
normalem Fenster und Vollbild. Icon wechselt zwischen Expand/Collapse.
Schließen und Reset beenden Vollbild automatisch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 13:29:05 +01:00