Promote develop → main (2026-05-01 20:17 UTC) #11
@@ -21,15 +21,21 @@ from source_rules import (
|
|||||||
|
|
||||||
logger = logging.getLogger("osint.orchestrator")
|
logger = logging.getLogger("osint.orchestrator")
|
||||||
|
|
||||||
# Reputations-Score nach Quellenkategorie (für Relevanz-Scoring)
|
# Reputations-Score nach Quellenkategorie (fuer Relevanz-Scoring).
|
||||||
|
# Keys muessen mit den tatsaechlichen DB-Werten in sources.category uebereinstimmen
|
||||||
|
# (siehe DOMAIN_CATEGORY_MAP in source_rules.py).
|
||||||
CATEGORY_REPUTATION = {
|
CATEGORY_REPUTATION = {
|
||||||
"nachrichten_de": 0.9,
|
"nachrichtenagentur": 1.0, # Reuters, AP, dpa, AFP — Primärquellen
|
||||||
"nachrichten_int": 0.9,
|
"behoerde": 1.0, # BMI, BSI, Europol — offizielle Quellen
|
||||||
"presseagenturen": 1.0,
|
"oeffentlich-rechtlich": 0.95, # tagesschau, ZDF, ARD, BBC, ORF
|
||||||
"behoerden": 1.0,
|
"qualitaetszeitung": 0.85, # Spiegel, Zeit, FAZ, NZZ, Süddeutsche
|
||||||
"fachmedien": 0.8,
|
"think-tank": 0.85, # SWP, IISS, Brookings, Chatham House
|
||||||
"international": 0.7,
|
"fachmedien": 0.8, # heise, golem, netzpolitik, Handelsblatt
|
||||||
"sonstige": 0.4,
|
"international": 0.75, # CNN, Guardian, NYT, Al Jazeera, France24
|
||||||
|
"regional": 0.65, # regionale Tageszeitungen
|
||||||
|
"telegram": 0.5, # OSINT-Kanaele — gemischte Qualitaet
|
||||||
|
"sonstige": 0.4, # unkategorisiert
|
||||||
|
"boulevard": 0.3, # Bild, Sun etc.
|
||||||
}
|
}
|
||||||
|
|
||||||
# Research-Modus: Automatisch 3 Durchläufe für optimale Ergebnisse
|
# Research-Modus: Automatisch 3 Durchläufe für optimale Ergebnisse
|
||||||
|
|||||||
@@ -50,18 +50,18 @@ PIPELINE_STEPS = [
|
|||||||
"icon": "map-pin",
|
"icon": "map-pin",
|
||||||
"tooltip": "Aus den Meldungen werden Ortsangaben erkannt und auf der Karte verortet.",
|
"tooltip": "Aus den Meldungen werden Ortsangaben erkannt und auf der Karte verortet.",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "summary",
|
|
||||||
"label": "Lagebild verfassen",
|
|
||||||
"icon": "file-text",
|
|
||||||
"tooltip": "Aus allen geprüften Meldungen wird ein zusammenhängendes Lagebild geschrieben, mit Quellenangaben am Text.",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "factcheck",
|
"key": "factcheck",
|
||||||
"label": "Fakten prüfen",
|
"label": "Fakten prüfen",
|
||||||
"icon": "shield",
|
"icon": "shield",
|
||||||
"tooltip": "Behauptungen aus den Meldungen werden gegeneinander abgeglichen: Bestätigt? Umstritten? Noch unklar?",
|
"tooltip": "Behauptungen aus den Meldungen werden gegeneinander abgeglichen: Bestätigt? Umstritten? Noch unklar?",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "summary",
|
||||||
|
"label": "Lagebild verfassen",
|
||||||
|
"icon": "file-text",
|
||||||
|
"tooltip": "Aus allen geprüften Meldungen wird ein zusammenhängendes Lagebild geschrieben, mit Quellenangaben am Text.",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "qc",
|
"key": "qc",
|
||||||
"label": "Qualitätscheck",
|
"label": "Qualitätscheck",
|
||||||
|
|||||||
@@ -646,7 +646,7 @@
|
|||||||
<script src="/static/js/ws.js?v=20260316b"></script>
|
<script src="/static/js/ws.js?v=20260316b"></script>
|
||||||
<script src="/static/js/components.js?v=20260427a"></script>
|
<script src="/static/js/components.js?v=20260427a"></script>
|
||||||
<script src="/static/js/layout.js?v=20260316b"></script>
|
<script src="/static/js/layout.js?v=20260316b"></script>
|
||||||
<script src="/static/js/pipeline.js?v=20260501a"></script>
|
<script src="/static/js/pipeline.js?v=20260501i"></script>
|
||||||
<script src="/static/js/app.js?v=20260501h"></script>
|
<script src="/static/js/app.js?v=20260501h"></script>
|
||||||
<script src="/static/js/cluster-data.js?v=20260322f"></script>
|
<script src="/static/js/cluster-data.js?v=20260322f"></script>
|
||||||
<script src="/static/js/tutorial.js?v=20260316z"></script>
|
<script src="/static/js/tutorial.js?v=20260316z"></script>
|
||||||
|
|||||||
@@ -141,20 +141,29 @@ const Pipeline = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn ein neuer Pass startet (pass_number > prev und status="active" beim ERSTEN step):
|
// Wenn der ERSTE Schritt (sources_review) auf "active" geht, beginnt ein neuer
|
||||||
// alle Schritte zurück auf pending setzen, damit die Animation neu durchläuft.
|
// Refresh oder ein neuer Multi-Pass-Durchlauf — alle nachfolgenden Schritte auf
|
||||||
|
// "pending" (grau) zuruecksetzen, damit der User sieht: das ist neu und
|
||||||
|
// noch nicht durchlaufen. Sonst stehen sie als "done" vom letzten Mal da.
|
||||||
|
let didReset = false;
|
||||||
if (d.status === 'active' && this._definition && this._definition.length
|
if (d.status === 'active' && this._definition && this._definition.length
|
||||||
&& key === this._definition[0].key && passNr > 1 && (!prev || prev.pass_number < passNr)) {
|
&& key === this._definition[0].key) {
|
||||||
// Alle anderen Steps in "pending" zurueck (visuell), Werte behalten wir
|
|
||||||
this._definition.forEach(s => {
|
this._definition.forEach(s => {
|
||||||
if (s.key !== key && this._stateByKey[s.key]) {
|
if (s.key !== key && this._stateByKey[s.key]) {
|
||||||
this._stateByKey[s.key].status = 'pending';
|
this._stateByKey[s.key].status = 'pending';
|
||||||
|
didReset = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this._patchBlock(key);
|
if (didReset) {
|
||||||
this._patchMiniBlock(key);
|
// Beim Reset alle Bloecke neu zeichnen, nicht nur den aktuellen
|
||||||
|
this._render();
|
||||||
|
this._renderMini();
|
||||||
|
} else {
|
||||||
|
this._patchBlock(key);
|
||||||
|
this._patchMiniBlock(key);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onRefreshDone(msg) {
|
_onRefreshDone(msg) {
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren