Commit graph

22 Commits

Autor SHA1 Nachricht Datum
claude-dev
9868a9748a fix(recherche): Suchbegriffe treffen wieder, Verzeichnis ohne Dubletten
Vier Befunde aus dem Vergleich vom 02.08.2026, sortiert nach Wirkung.

1. Mehrwort-Suchbegriffe fielen im RSS-Abgleich durch. Dieselbe Lage lieferte
   je nach Titel 79 oder 17 Treffer. Die Keyword-Erzeugung liefert bei
   politisch formulierten Titeln Phrasen ("migrationskrise spanien",
   "aufnahmeverfahren eu"), das Matching verglich sie als starre Zeichenfolge.
   Die Schlagzeile "Migrationskrise in Spanien" enthaelt "migrationskrise
   spanien" nicht, wegen des Wortes dazwischen. Aus 53 Artikeln wurden so 16.
   Eine Phrase trifft jetzt, wenn alle ihre Bestandteile im Text vorkommen,
   unabhaengig von Reihenfolge und Abstand. Die Genauigkeit bleibt erhalten,
   nur die starre Reihenfolge faellt weg.

   Dazu der Auftrag an die Keyword-Erzeugung: Einzelwoerter statt Phrasen, und
   die harten Eigennamen der Lage sind Pflicht. Bei den betroffenen Laeufen
   fehlte "ceuta" komplett, dafuer stand "europol migration" in der Liste, was
   den Europol-Feed anzog und sieben themenfremde Pressemitteilungen
   einbrachte, die der Topic-Filter danach wieder aussortieren musste.

2. Dubletten im Quellenverzeichnis. Lage 56 fuehrte 30 Eintraege fuer 28
   Adressen, zweimal dieselbe tagesschau-Meldung unter je zwei Nummern.
   Ausgerechnet die strittigste Behauptung, der offene Brief der 22 Staaten,
   stuetzte sich damit auf "3 Quellen", von denen zwei derselbe Artikel waren.
   Gleiche Adresse heisst jetzt ein Eintrag, Verweise auf die entfernte Nummer
   werden auf den behaltenen umgebogen. Verglichen wird ohne Schema, www und
   Endschraegstrich.

3. Die Zeitleiste wird deterministisch sortiert. Im selben Bericht sprang der
   letzte Eintrag von 12:44 zurueck auf 17:47. Der Auftrag verlangt die
   Sortierung zwar vom Modell, im prominentesten Kapitel darf sie aber nicht
   von dessen Sorgfalt abhaengen. Gegenprobe an Lage 56: 23:23, 22:09, 17:47,
   16:58 statt des Sprungs ans Ende.

4. Weiterleitungen zaehlen als ein Beleg. Sie verbergen ihr Zielmedium, also
   laesst sich nicht behaupten, dass dahinter verschiedene Redaktionen stehen.
   Die bisherige Einzelzaehlung stellte den Anthropic-Weg rechnerisch besser:
   in Lage 57 standen 10 ausgewiesene Belege fuer 7 Haeuser, weil vier der elf
   Adressen news.google.com-Weiterleitungen waren.

Gegenprobe an beiden gespeicherten Laeufen: Lage 56 zeigt 28 statt 30
Verzeichniseintraege, beide Berichte zaehlen lueckenlos, die Zeitleiste ist
sortiert.

Neu sind 26 Pruefungen, insgesamt laufen 206 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 00:43:28 +02:00
claude-dev
0154c0f575 fix(eu): Kapazitaetsengpaesse bei Bedrock aussitzen statt Schritte verlieren
Am 01.08.2026 lieferte Bedrock waehrend eines Laufs ServiceUnavailableException.
Botocore versuchte es dreimal in fuenf Sekunden und gab auf, die
Web-Source-Selektion fiel ersatzlos aus. Im Bericht war davon nichts zu sehen,
der Lauf galt als vollstaendig. Gemessen sind es zwei betroffene Aufrufe bei
rund 340, also 0,6 Prozent, aber jeder Vorfall kostet einen ganzen
Pipeline-Schritt.

Der Fehler ist auch keiner unserer Quote. ServiceUnavailableException ist ein
503, AWS hat also gerade keine Kapazitaet fuer das Modell. Unsere Meldung
sagte trotzdem "Rate-Limit", weil der Code beide Faelle in einen Topf warf.

Aendert sich damit:

1. Geduldiges Wiederholen. Kapazitaets- (503), Kontingent- (429) und
   Verbindungsfehler werden nach 5, 15 und 30 Sekunden erneut versucht. Diese
   Dellen dauern typischerweise unter einer Minute, unsere bisherigen fuenf
   Sekunden lagen genau im ungeguenstigsten Fenster. Stufen ueber
   BEDROCK_RETRY_WAITS einstellbar.

2. Zwei Bremsen gegen lange Laeufe. Gewartet wird nur, wenn die Wartezeit ins
   Zeitbudget des Aufrufs passt (die Wartezeit zaehlt gegen dasselbe
   asyncio-Budget, und die Haiku-Planungsaufrufe haben nur 120 Sekunden), und
   nur solange das Wartebudget des Refreshs reicht (BEDROCK_RETRY_BUDGET_S,
   Vorgabe 120 Sekunden). Ein Lauf kann sich dadurch um hoechstens zwei
   Minuten verlaengern.

3. Ursachen werden getrennt benannt. Im Log steht jetzt "hat keine freie
   Kapazitaet" oder "meldet ausgeschoepftes Kontingent" statt pauschal
   "Rate-Limit". Nach aussen bleibt beides die Kategorie rate_limit, damit die
   Retry-Steuerung des Orchestrators unveraendert greift.

4. Stoerungen werden sichtbar. Waehrend einer Wartezeit meldet die Oberflaeche
   "KI-Dienst hat keine freie Kapazitaet, neuer Versuch in 15 Sekunden", sonst
   sieht die stehende Anzeige wie ein Haenger aus. Nach dem Lauf steht eine
   Zusammenfassung im Refresh-Protokoll, auch wenn der Lauf sonst glatt
   durchlief.

5. botocore laeuft im Modus 'adaptive' statt 'standard'. Es bremst sich bei
   Drosselung selbst ein und deckt die Sekunden ab, unsere Schleife die
   Zehnersekunden.

Zeitliche Wirkung, gemessen am EU-Lauf der Ceuta-Lage (252 Sekunden, 15
Bedrock-Aufrufe): im stoerungsfreien Fall null, im betroffenen Lauf rund eine
Minute mehr. Bei 0,6 Prozent Fehlerrate je Aufruf trifft das etwa jeden
elften Lauf, im Mittel ueber alle Laeufe rund zwei Prozent.

Gegenprobe mit einem echten Bedrock-Aufruf ueber den geaenderten Pfad: Antwort,
Verbrauch und Kosten unveraendert, keine Stoerung protokolliert.

Neu sind 23 Pruefungen, insgesamt laufen 179 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 22:58:50 +02:00
claude-dev
3495409377 fix(faktencheck): Belegtiefe zaehlt Medienhaeuser, Widerspruch ist keine Widerlegung
Block 2 der Auswertung des Ceuta-Vergleichs vom 01.08.2026. Der Faktencheck der
EU-Fassung zeigte dort drei Fehler, die alle dieselbe Wurzel haben: Der Status
behauptete eine Belegtiefe, die niemand nachgerechnet hat.

1. Die Zaehlung war kaputt. Das Muster fuer die Quellenzaehlung war
   r'https?://' ohne den Rest der Adresse, findall lieferte also eine Liste aus
   "https://"-Bruchstuecken und len(set(...)) ergab immer 1 oder 2. Daher stand
   im Bericht eine Behauptung als BESTAETIGT mit 1 Quelle, obwohl vier Haeuser
   in der Evidenz standen, und der gesamte Faktencheck der Anthropic-Fassung
   wies durchgehend 1 bis 2 Quellen aus. Die Adresse wird jetzt vollstaendig
   erfasst.

2. Gezaehlt wird nach Medienhaus, nicht nach Fundstelle. Sechs France24-Treffer,
   davon vier Videofassungen derselben Meldung, sind ein Haus. Grundlage ist die
   registrierbare Domain aus services/media_registry.py. Weiterleitungsportale
   bekommen keine gemeinsame Identitaet, hinter news.google.com koennen
   beliebige Zeitungen stecken. Nachgerechnet an Lage 53 sinken die Angaben von
   9 auf 6, von 8 auf 4 und von 7 auf 5 Belege.

3. Neue Nachbedingung. pruefe_belegtiefe stuft jeden Fakt ab, dessen Status mehr
   behauptet als vorliegt: confirmed braucht zwei, established drei unabhaengige
   Haeuser. Ein Primaerbeleg (Originalzitat im Interview, amtliche Mitteilung,
   Urteil) traegt allein, dafuer liefert das Modell jetzt "evidence_type". Damit
   verschwindet auch die Unterkonfidenz der Gegenprobe, in der ein ZDF-Interview
   als unbestaetigt galt, obwohl der Kritisierte dort selbst spricht.

4. Die Nachhak-Runde stuft "developing" nicht mehr hoch. Sie hatte die
   Behauptung "Der Ausloeser ist weiterhin unklar" auf BESTAETIGT gesetzt, weil
   developing in der Statusordnung die niedrigste Stufe ist. Eine Unklarheit
   laesst sich nicht bestaetigen. Ausserdem rechnet die Runde die Belegzahl nach
   dem Hochstufen neu und nimmt die Stufe zurueck, wenn die Belege sie nicht
   decken.

5. Widerspruch und Widerlegung sind getrennt. "contradicted" meint laut Auftrag
   Belege, die einander widersprechen, wurde aber als "Widerlegt" angezeigt. Im
   Bericht stand deshalb die sachlich zutreffende Spanne von 50.000 bis 60.000
   Grenzuebertritten als widerlegt, obwohl die Evidenz woertlich sagt "Die
   Zahlen variieren je nach Quelle". Jetzt: contradicted = "Widersprüchlich",
   der neue Status "false" = "Widerlegt" und setzt einen entkraeftenden Beleg
   voraus. Angepasst in Bericht, Oberflaeche, beiden Sprachdateien, Farben und
   Statusordnung.

6. Ein verbindlicher Regelblock haengt an jedem Faktencheck-Auftrag
   (bewertungsregeln()): Unabhaengigkeit heisst verschiedene Medienhaeuser,
   Agenturuebernahmen zaehlen einmal, unterschiedliche Zahlen verschiedener
   Erhebungsstellen sind kein Widerspruch sondern eine Spanne mit Zuordnung,
   und Aussagen ueber den Kenntnisstand ("Der Ausloeser ist unklar") sind keine
   pruefbaren Behauptungen und gehoeren nicht in den Faktencheck.

Die Aenderungen wirken auf beide Modellwege. Die Fixtures in test_eu_factcheck
liefern jetzt Belege aus mehreren Haeusern, weil eine einzelne Quelle keine
Bestaetigung mehr traegt.

Nachgerechnet an beiden gespeicherten Laeufen: kein Fakt wird durch die neue
Nachbedingung abgestuft, die Belegzahlen werden aber durchgehend ehrlicher.

Neu sind 27 Pruefungen, insgesamt laufen 156 ohne Netzzugriff und ohne Kosten.

Offen: Die Oberflaechen-Aenderungen (components.js, app.js, style.css, i18n)
sind noch nicht in den Lokal-Fork portiert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 22:01:30 +02:00
claude-dev
58aec2edd5 fix(bericht): Quellenverzeichnis gibt die Nummern aus dem Lagebild wieder
Der Vergleich zweier Berichte zur selben Lage (Ceuta, 01.08.2026) zeigte in
beiden Fassungen Textverweise, die im gedruckten Verzeichnis nicht auftauchten.
Die EU-Fassung zitierte bis [28] bei 25 aufgefuehrten Quellen, die
Anthropic-Fassung bis [29] bei 22.

Ursache war nicht die Analyse. In der Datenbank passen Text und Liste in beiden
Laeufen exakt zusammen, keine einzige Referenz ohne Eintrag. Das PDF-Template
druckte jedoch die laufende Zeilennummer (loop.index) statt der Quellennummer
aus dem Lagebild (src.nr). Sobald die Nummern Luecken haben, und das ist der
Normalfall, weil nicht jede gesammelte Meldung zitiert wird, verschiebt sich
ab der ersten Luecke jeder Beleg. Lage 53 hat die Nummern 1 bis 20, 22, 24, 26,
27, 28: gedruckt wurde 1 bis 25, aus Quelle 28 wurde Zeile 25.

Behoben:

1. Das Verzeichnis druckt src.nr. Gegenprobe an den echten Daten beider Laeufe:
   vorher fehlten in Lage 53 die Verweise [22] bis [28], jetzt loest jede der
   25 Referenzen auf, in Lage 52 alle 22.

2. Keine Kappung des Verzeichnisses mehr. Im Umfang "Bericht" wurde bei 30
   Eintraegen abgeschnitten, hoehere Referenzen im Text waren damit
   grundsaetzlich unaufloesbar.

3. Die Word-Ausgabe bekommt ueberhaupt erst ein Quellenverzeichnis. Bisher
   verwies der Text dort auf [1], [2], ohne dass die Datei die Nummern
   irgendwo aufloeste.

4. Die Quellenstatistik bezieht sich jetzt auf dieselbe Grundmenge wie das
   Verzeichnis. Vorher zaehlte sie alle gesammelten Artikel (49) und stand
   damit neben einem Verzeichnis mit 25 Eintraegen, was wie eine Aufwertung
   der Quellenbasis wirkte. Die Summe der Spalte Belege entspricht jetzt der
   Zahl der Eintraege, ein Hinweis nennt zusaetzlich die insgesamt
   ausgewerteten Meldungen.

5. Ein Verlag wird unter einem Namen gefuehrt. Bisher trennte der Bericht
   "Guardian UK", "Guardian World" und "The Guardian" oder "tagesschau" und
   "tagesschau.de" in eigene Zeilen und blaehte damit die Vielfaltsstatistik
   auf. Die neue services/media_registry.py bestimmt die Identitaet ueber die
   registrierbare Domain und waehlt den haeufigsten Namen. Aus 20
   Statistikzeilen der EU-Fassung werden so 11 echte Medien. Sie kennt
   ausserdem Weiterleitungsportale und liest die Sprache aus der Adresse,
   sodass english.elpais.com nicht mehr als DE gefuehrt wird.

Neu sind 22 Pruefungen, insgesamt laufen 118 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 21:41:38 +02:00
claude-dev
bf967216de fix(analyse): vollstaendigen Bericht nehmen, wenn das Modell sich selbst korrigiert
Der Recherchebericht der EU-Fassung enthielt seit zwei Laeufen nur noch den
Abschnitt ZUSAMMENFASSUNG, 1513 statt der ueblichen mehreren tausend Zeichen.
Die Abschnitte HINTERGRUND, AKTEURE, AKTUELLE LAGE, EINSCHAETZUNG und
QUELLENQUALITAET fehlten vollstaendig.

Ursache. Das Modell lieferte zuerst ein knappes JSON, bemerkte den Fehler
selbst ("Wait, I need to include the full briefing content in the summary
field. Let me redo this properly with all sections") und haengte danach eine
zweite, vollstaendige Fassung an. Unsere Auswertung nahm das erste Objekt und
verwarf alles danach. Der Bericht war also da, wir haben ihn weggeworfen.

Behoben. json_utils bekommt extract_json_objects und extract_json_arrays, die
alle vollstaendigen Bloecke einer Antwort liefern statt nur den ersten. Der
Analyzer waehlt daraus den Bericht mit dem laengsten summary, der Faktencheck
die Liste mit den meisten Fakten. Beide protokollieren, wenn mehrere Fassungen
auftauchen, damit der Fall sichtbar bleibt. Die bisherigen Einzelabfragen
extract_json_object und extract_json_array bleiben unveraendert, damit sich an
den uebrigen Aufrufstellen nichts aendert.

Gegenprobe an der echten Antwort aus Lauf 50. Vorher 1513 Zeichen mit einem
Abschnitt, jetzt 8189 Zeichen mit allen sechs.

Neu sind 16 Pruefungen, insgesamt laufen 96 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 13:49:15 +00:00
claude-dev
5a08507217 docs: Testordner in der Projektstruktur ergaenzen
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 13:27:25 +00:00
claude-dev
fb15f3ac8d docs: UI-Sync um den KI-Weg-Umschalter ergaenzt (online-only)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 21:27:37 +00:00
claude-dev
b32c54b22c feat(eu-umbau): Faktencheck und Lagebild auf die EU-Suche umgestellt (Phase 3)
Im EU-Modus laufen jetzt auch Faktencheck und Lagebild komplett ueber Bedrock,
damit gibt es dort keine CLI-Aufrufe mehr. Der Faktenchecker bekommt vorab
eine gezielte staan-Stuetzsuche (eu_call_with_search: Haiku plant
Verifikations-Queries zu offenen Behauptungen, Treffer wandern als
Kontextblock in den Prompt und werden als Zweitquellen zitiert). Das Lagebild
arbeitet im EU-Modus rein auf dem Meldungsbestand, die EU-Recherche hat
unmittelbar davor gesammelt. Alle fuenf Aufrufstellen (Erst-/inkrementeller
Faktencheck, Gruppen-Verifikation, Erst-/inkrementelle Analyse) haben die
Weiche, der CLI-Modus bleibt unveraendert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 21:08:34 +00:00
claude-dev
a7f1aa29ab feat(eu-umbau): staan-Recherche-Schleife und Doppelspur (Phase 2)
Im EU-Modus laeuft die Recherche jetzt europaeisch: agents/eu_researcher.py
steuert eine Schleife aus Bedrock-Planung (Opus, EU-Profile) und staan-Suchen
(services/staan_client.py, Suche + Volltexte via full_content=markdown,
Pflicht-Domain-Ausschlussliste je Anfrage). Bildet die 4-Phasen-Tiefenrecherche
nach und liefert exakt das JSON der bisherigen CLI-WebSearch, Parsing und
Filter in researcher.search bleiben unveraendert. Anti-Halluzination: nur URLs
aus echten staan-Treffern werden akzeptiert; published_at nur wenn aus Inhalt
oder URL ableitbar (staan liefert keine Daten).

Doppelspur im Orchestrator: Lane-Schluessel ist jetzt (Organisation, Backend),
Aufloesung zentral in _resolve_ai_backend (Lage > Org-Setting > ENV). CLI- und
EU-Lauf derselben Organisation laufen gleichzeitig, gleiche Backends seriell.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 20:12:31 +00:00
claude-dev
e0edac2a18 docs: veralteten TaskMate-Changelog-Workflow aus CLAUDE.md entfernt
Die Changelog-Kategorien existieren in der aktuellen TaskMate-Instanz nicht
mehr (Wissensdatenbank enthaelt keine Changelog-Kategorien, letzter Eintrag
Mai 2026). Die Commit-und-Push-Pflicht steht weiterhin im Abschnitt Regeln.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:59:29 +00:00
claude-dev
fc33cccd44 feat(eu-umbau): Bedrock als zweiter KI-Modellweg (Phase 1)
Zweiter Modellweg ueber AWS Bedrock (EU-Inferenzprofile Frankfurt), umschaltbar
je Lage (incidents.ai_backend) > Organisation (org_setting ai_backend) > global
(ENV AI_BACKEND, Default cli). Neue Datei agents/bedrock_client.py (Converse
API, nur eu.-Profile, Token-zu-USD-Umrechnung ueber BEDROCK_PRICING, gleiche
Fehlerkategorien wie das CLI). Routing zentral in call_claude; Aufrufe mit
WebSearch/WebFetch laufen bis zur staan-Schleife (Phase 2) weiter uebers CLI.
Migration: Spalte incidents.ai_backend. requirements: boto3.
Hinweis Promote: boto3 muss im Live-venv installiert werden.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 19:48:52 +00:00
claude-dev
4c024cd470 docs: CLAUDE.md auf den echten Stand gebracht
Korrigiert: DB-Pfad (/home/claude-dev/osint-data, nicht /mnt/gitea),
Dienstname aegis-monitor.service, Ein-Prozess-Hinweis, Scheduler-Jobs
vollstaendig, Pipeline-Reihenfolge (Faktencheck VOR Lagebild),
Reiter-Ansicht statt gridstack, Tabellenliste vervollstaendigt
(keine feedback-Tabelle, dafuer refresh_pipeline_steps, incident_events,
fact_check_runs, billing_tariff, user_activity_days, system_status u.a.),
Mandantentrennungs-Aussage praezisiert, Staging-DB-Pfad + .env-Realitaet,
veralteter Workflow-Abschnitt ersetzt (Auto-Deploy laeuft laengst),
erledigte offene Punkte raus, stattdessen ehrliche Baustellen-Liste
Stand 26.07.2026, UI-Sync-Unterschiede in beide Richtungen aktualisiert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 02:10:04 +00:00
claude-dev
ec3843bbe3 docs(ui-sync): Stand nach Abrechnungs-Port aktualisiert
Die Credits-Abrechnung ist jetzt auf beiden Seiten, offen aus dem Fork
bleiben die Takt-Features (5b0b578). Zeilenenden-Hinweis präzisiert,
src/static ist CRLF, die Python-Dateien dieses Repos sind LF.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 12:28:55 +00:00
claude-dev
ecfc208f22 docs(ui-sync): verbindliche UI-Sync-Regel mit dem Lokal-Fork
Neuer CLAUDE.md-Abschnitt legt fest, dass jede Änderung unter src/static
noch in derselben Sitzung ins jeweils andere Repo portiert wird.
Dokumentiert die gewollten Unterschiede, den einheitlichen
Credits-Wortlaut, den Cherry-Pick-Weg über Cross-Remotes und die
CRLF-Stolperfalle. Der Drift-Check liegt im Lokal-Fork unter
scripts/ui-drift-check.sh.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:57:17 +00:00
Claude Code
8042639d20 CLAUDE.md: Auto-Deploy + Promote-UI + Live-systemd dokumentiert
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 19:14:35 +00:00
claude-dev
ec53ab27cd CLAUDE.md: Staging-Umgebung dokumentiert (Service, DB, .env, Workflow)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 17:56:29 +00:00
claude-dev
acfc74ffe7 Standard-Opus auf claude-opus-4-7 festlegen (statt CLI-Default) 2026-04-16 22:19:26 +00:00
Claude Dev
a84e2c108e docs: CLAUDE.md um Prompt Enhancement Feature ergaenzt 2026-03-27 23:31:18 +01:00
Claude Dev
4f8400bfbd docs: CLAUDE.md aktualisiert (neue Serveradresse, fehlende Dateien, Multi-Pass, vollstaendige Architektur) 2026-03-27 23:27:40 +01:00
claude-dev
45d4d35f49 CLAUDE.md: Health-Check Services + DB-Tabellen dokumentiert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:27:22 +01:00
claude-dev
247b72133e CLAUDE.md aktualisiert + broadcast_for_incident tenant_id Fix
- CLAUDE.md komplett neu geschrieben mit aktueller Projektstruktur
- broadcast_for_incident: tenant_id Parameter hinzugefuegt (TypeError Fix)
2026-03-04 18:55:17 +01:00
claude-dev
8312d24912 Initial commit: AegisSight-Monitor (OSINT-Monitoringsystem) 2026-03-04 17:53:18 +01:00