feat(web-research): Webrecherche als Opt-in für den Notiz-Agenten#42
Merged
Conversation
Der Notiz-Agent kann optional im Web recherchieren und eine Notiz mit Quellen schreiben. Default aus, pro Lauf über einen Globus-Toggle scharf. - Provider SearXNG (eigene Instanz) oder Linkup (EU); Config Main-seitig (0d) - Zustandsmaschine search → fetch → write; web_fetch nur auf Suchtreffer- bzw. Auftrags-URLs (Allowlist führt der Main, nicht das Modell) - Gepinnter Egress mit validierendem DNS-lookup (SSRF-Zaun v4+v6), same-host-Redirects, Streaming-Dekompression + Gesamt-Zeitlimit - Lokale Extraktion (defuddle + linkedom + turndown); deterministischer Quellenblock aus tatsächlich abgerufenen Seiten - Private SearXNG-Adresse braucht Main-seitige Nutzerfreigabe (exaktes Origin) - Modul „Webrecherche" + Settings-Sektion + Globus-Toggle + Provenienz-Anzeige - Konzept + Sicherheitsvertrag in docs/web-research-plan.md Getestet: Unit + Integration (SSRF, Allowlist, Zustandsmaschine, Titel- Injektion, deterministischer Quellenblock, Ein-Write-Vertrag), realer Agent-Loop mit qwen3.5:4b (3 Leitfälle), asar-Laufzeit-Auflösung bewiesen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Keylose Suche (DuckDuckGo & Co.) ist 2026 nicht mehr verlässlich — DDG blockt nach wenigen Anfragen mit Bot-Challenge, Jina/Brave brauchen inzwischen Key. Tavily ist der pragmatische „fast so einfach wie Claude"-Weg: kostenloser Key ohne Kreditkarte (~1.000 Suchen/Monat), zuverlässige API. - Tavily als dritter Provider und neuer Default (erste Wahl im Picker, „empfohlen") - API-Keys jetzt pro Provider verschlüsselt gespeichert (Wechsel überschreibt den anderen Key nicht); IPC + WebRunState auf generisches `apiKey` umgestellt - WebResearchSection zeigt je Provider Key- bzw. URL-Feld (meta-getrieben), ehrlicher Privacy-Text (US-Firma, EU verlassen) - Fix: KI-Leiste (Agent-Review) wuchs bei langen Läufen über den Bildschirm → max-height 40vh + internes Scrollen, „Übernehmen"-Button wieder erreichbar GUI-verifiziert mit qwen3.6:27b-mlx + Tavily: 3 Suchen → 3 Fetches → Notiz mit Quellenblock + Provenienz. Typecheck grün, 826 Tests grün, Build grün. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sechster Baustein (DE+EN), outcome-led: optionale Webrecherche pro Auftrag, Notiz mit Quellenverzeichnis, nur Suchanfragen verlassen den Rechner (lokale Extraktion), freie Anbieterwahl. Globus-Icon; screenshot.png als Platzhalter. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was
Der Notiz-Agent kann optional im Web recherchieren und eine Notiz mit Quellen schreiben. Default aus, pro Lauf über einen Globus-Toggle scharf. Für ein „einfach verfügbar"-Erlebnis ist Tavily der empfohlene Default (kostenloser Key, keine Kreditkarte); SearXNG (self-host) und Linkup (EU) bleiben für Power-User/DSGVO.
Sicherheitsmodell (docs/web-research-plan.md, „Phase 0 — Sicherheitsvertrag")
web_fetchnur auf Suchtreffer- bzw. Auftrags-URLs — der Main führt die Allowlist, nie das Modell.lookup(SSRF-Zaun v4+v6, inkl. IPv4-mapped/NAT64), same-host-Redirects ohne Downgrade, Streaming-Dekompression + absolutes Gesamt-Zeitlimit.## Quellen-Block aus tatsächlich abgerufenen Seiten (Modell kann keine ungefetchten URLs zitieren).isTrustedSender.UI
Modul „Webrecherche" + Settings-Sektion + Globus-Toggle (pro Lauf, nur im Agent-Modus, springt bei fehlender Config in die Einstellungen) + Provenienz-Anzeige („N Suchen · M Seiten"). DE+EN.
Test / Verifikation
app.asar, Laufzeit-Auflösung bewiesen.Offen (kein Blocker)
Externe Titel-/Webcontent-Injection auf kontrolliertem Webspace (localhost scheitert am SSRF-Zaun; strukturell durch Sanitization + Unit-Tests abgedeckt).
🤖 Generated with Claude Code